为什么我得到NoClassDefFoundError:java / awt / Desktop?

我正在尝试用Swing打开一个URI ,我得到了错误。

是什么原因,我该如何解决?

当我在控制台中执行它时一切正常但是当我在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) 

DocC on NoClassDefFoundError

搜索的类定义在编译当前正在执行的类时存在,但无法再找到该定义。

你确实发生了一些不正确的类加载。 主要是由于错误的类加载器链接。

NoClassDefFoundError只能由类路径问题引起。

因为Desktopjre的一部分,所以请确保您的类路径包含对jre库的引用。

Eclipse中 ,您可以运行配置 – > Classpath并检查那里

更新:

正如Andrew建议的那样,你也可以检查你至少有java 1.6

java.awt.Desktop已在Java 6中引入。 很可能你在不同的JRE版本上运行你的代码。