2011-03-03 90 views
6

我有一個包,聲明瞭一個激活器。這個激活器創建一個JFrame並顯示它。OSGi上的java.lang.NoClassDefFoundError

在Eclipse上作爲插件項目運行它工作正常。當我穿上費利克斯時,它不再起作用。 它顯示: java.lang.NoClassDefFoundError:COM /格里普/ UI /大型機

但大型機位於同一捆綁的活化劑是,作爲公共類的,當然。我不明白爲什麼類加載器沒有找到類。

任何人都知道發生了什麼?

+0

有一個包裹例外? – 2011-03-03 13:24:29

+0

似乎沒有= [... – 2011-03-03 13:36:03

回答

6

確保導入的javax.swing包放到你的包:

Import-Package: javax.swing 
+0

@Neil沒有這是錯誤的,OPhas是osgi配置文件設置爲Bundle-RequiredExecutionEnvironment:J2SE-1.5,這意味着javax。*包應該自動導出system.bundle – 2011-03-03 17:09:35

+3

@Suraj抱歉,不得不公開反對,但只是因爲系統包導出了javax.swing包並不意味着它是由其他包自動導入的。 OSGi中的規則是您必須導入您使用的軟件包,唯一的例外是「java。*」。 – 2011-03-04 05:04:08

+0

@Neil @Neil在寫這樣的東西之前,你是否嘗試過呢?我可以使用javax.swing包而不導入它。你知道「Bundle-RequiredExecutionEnvironment」的概念和配置文件的概念。至少編寫一些代碼並在誤導他人之前檢查自己。 – 2011-03-04 05:17:00

0

您已聲明維管束類路徑捆綁軟件的MANIFEST.MF

+0

不...但正如我所說的,MainFrame位於相同的激活碼爲 – 2011-03-03 13:39:46

+0

的包中,您不得不提及Bundle-ClassPath。儘管默認情況下它可能會提起「。」但只是確保... – 2011-03-03 13:52:22

+0

hmmmm我發現在日誌中嵌套的excote ... 引起:java.lang.ClassNotFoundException:javax.swing.JFrame 爲什麼我需要聲明? JFrame在java默認庫中。 – 2011-03-03 14:07:00

1

現在,它的作品!我在配置文件中配置了啓動委派!

我把org.osgi.framework.bootdelegation =放在config.ini中。

你們兩個都應該在男人嘿嘿之前告訴我這件事。現在我在Equinox wiki上讀到,遵循OSGi規範,我需要定義每個需要使用的包,我認爲它是正確的,因爲一些定製的虛擬機可以具有比其他更多的庫。

但是Eclipse不會在導入每個java包的概念(如javax.swing)中工作。我會在Eclipse Bugzilla中報告這一點。

非常感謝你們!

PS:你的書@Neil?

+0

我已經報道了https://bugs.eclipse.org/bugs/show_bug.cgi?id=338924 – 2011-03-04 12:55:35

2

使用這個VM參數:

-Djava.specification.version=1.6

這將迫使菲利克斯使可用的系統軟件包的默認設置爲Java 6中,其中包括javax.swing和它的子包

+0

我用了那個時間,但還不夠。謝謝 – 2013-02-17 18:50:03

相關問題