6

アクティベーターが宣言されたバンドルがあります。このアクティベーターは、JFrame を作成して表示します。

Plugin プロジェクトとして Eclipse で実行すると、正常に動作します。Felixを装着すると、もう機能しません。次のように表示されます: java.lang.NoClassDefFoundError: com/griep/ui/MainFrame

しかし、メインフレームは、もちろんパブリック クラスとして、アクティベーターと同じバンドルにあります。クラスローダーがクラスを見つけられない理由がわかりません。

誰が何が起こっているのか知っていますか?

4

4 に答える 4

6

javax.swingパッケージをバンドルに必ずインポートしてください。

Import-Package: javax.swing
于 2011-03-03T15:52:25.180 に答える
2

次の VM 引数を使用します。

-Djava.specification.version=1.6

これにより、Felix は Java 6 用のシステム パッケージのデフォルト セットを利用できるようになります。これにはjavax.swing、 およびそのサブパッケージが含まれます。

于 2013-02-16T13:53:00.373 に答える
1

今それは動作します!構成ファイルでブート委任を構成しました!

org.osgi.framework.bootdelegation=を config.iniに入れました。

2人ともこれをみんなに言う前に言っておくべきだった。今、私は Equinox wiki を読んで、OSGi 仕様に従って、使用する必要のあるすべてのパッケージを定義する必要があることを読みました。カスタマイズされた VM の中には、他のものよりも多くのライブラリを持つことができるものがあるため、それは正しいと思います。

しかし、Eclipse は、すべての Java パッケージ (javax.swing など) をインポートするというこの概念では機能しません。これは Eclipse Bugzilla で報告します。

ありがとうございます!

PS: あなたの本 @Neil は何ですか?

于 2011-03-04T12:24:53.853 に答える
0

バンドルの MANIFEST.MF で Bundle-ClassPath を宣言しましたか

于 2011-03-03T13:24:04.887 に答える