2012-01-24 52 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版本上运行你的代码。

相关问题