2012-01-24 131 views
0

我試圖用Swing打開一個URI,我得到以上錯誤。爲什麼我會得到NoClassDefFoundError:java/awt/Desktop?

是什麼原因,我該如何解決?

當我在控制檯中執行它時,一切正常,但是當我在GUI中執行時,出現此錯誤。 我應該說我使用Weblogic作爲服務器。

代碼

private static void open(URI uri) { 
    if (Desktop.isDesktopSupported()) { 
     try { 
      Desktop.getDesktop().browse(uri); 
     } catch (IOException e) { /* TODO: error handling */ } 
    } else { /* TODO: error handling */ } 
} 

堆棧跟蹤:

Exception in thread "AWT-EventQueue-1" java.lang.NoClassDefFoundError: java/awt/Desktop 
at be.azvub.ext.bcfidownloder.BcfiDownloadPanel.open(BcfiDownloadPanel.java:230) 
at be.azvub.ext.bcfidownloder.BcfiDownloadPanel.access$000(BcfiDownloadPanel.java:37) 
at be.azvub.ext.bcfidownloder.BcfiDownloadPanel$7.actionPerformed(BcfiDownloadPanel.java:147) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
at java.awt.Component.processMouseEvent(Component.java:5517) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3129) 
at java.awt.Component.processEvent(Component.java:5282) 
at java.awt.Container.processEvent(Container.java:1966) 
at java.awt.Component.dispatchEventImpl(Component.java:3984) 
at java.awt.Container.dispatchEventImpl(Container.java:2024) 
at java.awt.Component.dispatchEvent(Component.java:3819) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) 
at java.awt.Container.dispatchEventImpl(Container.java:2010) 
at java.awt.Window.dispatchEventImpl(Window.java:1791) 
+5

正在運行此代碼的JRE的[java.version](http://pscode.org/prop/?prop=java.version)是什麼? ['Desktop'](http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html)是1.6+課程。 –

+1

另外,這裏有Swing標籤,但您提到了WebLogic服務器(服務器可能是「無頭」的 - 不允許GUI)。這讓我困惑。此代碼是在服務器上還是在遠程客戶端上運行? –

回答

0

Doc on NoClassDefFoundError

編譯當前正在執行的類時存在搜索到的類定義,但無法再找到該定義。

你確實有一些不正確的類加載發生。主要是由於錯誤的類加載器鏈接。

+0

@itro我的回答並不完整,只是一個提示。很高興幫助。什麼是'真正的修復'? – Jayan

0

NoClassDefFoundError只能由類路徑問題引起的。

因爲DesktopJRE的一部分,請確保您的類路徑包含JRE庫的引用。

Eclipse中,你可以去運行配置 - >類路徑,檢查有

UPDATE:

安德魯建議,你也可以檢查你至少有java 1.6

+1

如果JRE不在類路徑中,則不會找到URI。 –

+0

你確定嗎?我認爲JRE庫只需要在Java的第一個版本的CLASSPATH中。 –

+0

@AndrewThompson也許他的classpath是無序的,其中的一個jar包含一個不完整的jre,這是從哪裏找到URI –

0

java.awt.Desktop已被引入in Java 6。機會很高,你在不同的JRE版本上運行你的代碼。

相關問題