
Ubuntu日本語フォーラム

ログインしていません。
いつもお世話になっています.
Ubuntu 13.04でFreemind 0.9.0を使っています.
特に問題なく動いているように思えたのですが,環境設定が行えないことがわかりました.
そこで,以下のことを試しました.
[1] 初期設定ファイルの初期化
環境設定ファイルが壊れていると,環境設定が行えないようなので,~/.freemindをバッサリ削除して起動してみました.
しかし,やはり環境設定は行えませんでした.
[2] Javaランタイムの変更
当初,OpenJDK7を使っていました.そこで,Oracleのものだと動くかと思い,Oracle JDK6/7/8すべて試しましたが,やはり環境設定は行えませんでした.
端末からFreemindを起動して環境設定を行おうとすると以下のようにエラーが表示されます.例外が生じているようです.
STDERR: Exception in thread "AWT-EventQueue-0" STDERR: java.lang.IllegalAccessError: tried to access method com.jgoodies.forms.layout.RowSpec.<init>(Ljava/lang/String;)V from class freemind.preferences.layout.OptionPanel$KeyProperty STDERR: at freemind.preferences.layout.OptionPanel$KeyProperty.layout(OptionPanel.java:403) STDERR: at freemind.preferences.layout.OptionPanel.buildPanel(OptionPanel.java:205) STDERR: at freemind.controller.Controller$PropertyAction.actionPerformed(Controller.java:1500) STDERR: at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) STDERR: at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) STDERR: at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) STDERR: at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) STDERR: at javax.swing.AbstractButton.doClick(AbstractButton.java:376) STDERR: at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833) STDERR: at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877) STDERR: at java.awt.Component.processMouseEvent(Component.java:6505) STDERR: at javax.swing.JComponent.processMouseEvent(JComponent.java:3312) STDERR: at java.awt.Component.processEvent(Component.java:6270) STDERR: at java.awt.Container.processEvent(Container.java:2229) STDERR: at java.awt.Component.dispatchEventImpl(Component.java:4861) STDERR: at java.awt.Container.dispatchEventImpl(Container.java:2287) STDERR: at java.awt.Component.dispatchEvent(Component.java:4687) STDERR: at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) STDERR: at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) STDERR: at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) STDERR: at java.awt.Container.dispatchEventImpl(Container.java:2273) STDERR: at java.awt.Window.dispatchEventImpl(Window.java:2719) STDERR: at java.awt.Component.dispatchEvent(Component.java:4687) STDERR: at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) STDERR: at java.awt.EventQueue.access$200(EventQueue.java:103) STDERR: at java.awt.EventQueue$3.run(EventQueue.java:688) STDERR: at java.awt.EventQueue$3.run(EventQueue.java:686) STDERR: at java.security.AccessController.doPrivileged(Native Method) STDERR: at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) STDERR: at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) STDERR: at java.awt.EventQueue$4.run(EventQueue.java:702) STDERR: at java.awt.EventQueue$4.run(EventQueue.java:700) STDERR: at java.security.AccessController.doPrivileged(Native Method) STDERR: at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) STDERR: at java.awt.EventQueue.dispatchEvent(EventQueue.java:699) STDERR: at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) STDERR: at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) STDERR: at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) STDERR: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) STDERR: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) STDERR: at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
何か対処法はありますでしょうか?
オフライン
java.lang.IllegalAccessError
アクセスできないフィールドへのアクセスや変更、あるいはアクセスできないメソッドの呼出しをアプリケーションが試みた場合にスローされます。
とのことですので、関連するファイルが書き込めないのではないでしょうか。
オフライン
私のテスト環境でも再現しました。
freemindをビルドした時点のlibjgoodies-forms-javaと、freemind実行時点のlibjgoodies-forms-javaのバージョンに食い違いが発生しているのが、原因でしょう。
具体的には、freemind.preferences.layout.OptionPanelの403行目で、RowSpecをnewしてますが、
rowSpec = new RowSpec("fill:20dlu");com.jgoodies.forms.layout.RowSpecのコンストラクタのうち、文字列を受け入れるコンストラクタ
private RowSpec(String encodedDescription){ ... }が何故かprivateになってます。(おそらく以前はpublicでprivateに変更されたのかと)
だから、IllegalAccessErrorが発生するのでしょう。
[回避策]
Ubuntu 12.04のlibjgoodies-forms-javaを http://packages.ubuntu.com/precise/libjgoodies-forms-java からダウンロード
↓
debファイルの中身の./usr/share/java/forms-1.3.0.jarをクラスパスに含めた上で、freemindを起動すれば、"とりあえず"直る。
(古いバージョンのlibjgoodies-forms-javaを強引に使う事で、freemindにおいて他にどういう影響があるかは私には全く分からない。)
例えば、
CLASSPATH=/home/ユーザ名/forms-1.3.0.jar:$CLASSPATH freemind
な感じ。
なお、ファイル書き込みなどは全く関係ないです。
どのランタイムで動かすかも関係ないです。
>S_T_Mさん
情報ありがとうございます.
同じファイルで過去のUbuntuでは開けていましたし,.freemind等のパーミッション等も特に問題ないようです.
インストールもapt-getで行なっていますので,大丈夫だとは思っています.
> STGSAGWANさん
検証と詳細なご報告,ありがとうございます.
原因がわかって安心しました.
ご指摘のライブラリを古いものにするのは少し不安でしたので,結局,こちらから,
「binaries for any operating system - max」をダウンロードして,ホームディレクトリ下に展開し,利用することにしました.このアーカイブは問題なく環境設定も動きます.(設定ウインドウが表示されるまで少し待たされますが...)
次回アップデートで修正されることを期待して,しばらくこの方法でつなごうかと思います.
オフライン