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

为什么我会得到NoClassDefFoundError:java/awt/Desktop?,java,swing,exception,weblogic,noclassdeffounderror,Java,Swing,Exception,Weblogic,Noclassdeffounderror,我试图打开一个带有Swing的URI,我在上面得到了一个错误 原因是什么?我如何解决 当我在控制台中执行此操作时,一切都正常,但当我在GUI中执行此操作时,会出现此错误。 我应该说我使用Weblogic作为服务器 代码 private static void open(URI uri) { if (Desktop.isDesktopSupported()) { try { Desktop.getDesktop().browse(uri);

我试图打开一个带有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)

NoClassDefFoundError
只能由类路径问题引起

由于
Desktop
jre的一部分,请确保您的类路径包含对jre库的引用

Eclipse中,您可以转到运行配置-->类路径并在那里进行检查

更新:

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)

正如Andrew所建议的,您还可以检查是否至少有java 1.6,NoClassDefFoundError只能由类路径问题引起

由于
Desktop
jre的一部分,请确保您的类路径包含对jre库的引用

Eclipse中,您可以转到运行配置-->类路径并在那里进行检查

更新:

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)
正如Andrew所建议的,您还可以检查是否至少有java 1.6文档

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

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

上的文档

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


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

java.awt.Desktop
已经引入。您很有可能在不同的JRE版本上运行代码。

java.awt.Desktop
已经引入。您很有可能在不同的JRE版本上运行代码。

如果JRE不在类路径中,将找不到
URI
。您确定吗?我认为JRE库只需要在Java最早版本的类路径中。@AndrewThompson可能他的类路径混乱,其中一个JAR包含不完整的JRE,这就是URI所在的位置found@AndrewThompson而且您如何确定URI来自jre,而不是来自他创建的类或另一个jar中的类?“您如何确定URI来自jre”当方法实际指定URI时,OP提到的URL。我怀疑那个级别的人会使用URI类的自定义版本。我甚至会给你100:1的赔率如果JRE不在类路径中,将找不到
URI
。是否确定?我认为JRE库只需要在Java最早版本的类路径中。@AndrewThompson可能他的类路径混乱,其中一个JAR包含不完整的JRE,这就是URI所在的位置found@AndrewThompson而且您如何确定URI来自jre,而不是来自他创建的类或另一个jar中的类?“您如何确定URI来自jre”当方法实际指定URI时,OP提到的URL。我怀疑那个级别的人会使用URI类的自定义版本。我甚至会给你100:1的赔率运行此代码的JRE的主要功能是什么?是一个1.6+类。顺便说一句,它有Swing标签,但您提到了WebLogic服务器(服务器可能是“无头的”——不允许使用GUI)。这使我困惑。这段代码是在服务器上运行还是在远程客户端上运行?运行这段代码的JRE的性能如何?是一个1.6+类。顺便说一句,它有Swing标签,但您提到了WebLogic服务器(服务器可能是“无头的”——不允许使用GUI)。这使我困惑。这段代码是在服务器上运行还是在远程客户端上运行?@itro我的回答不完整,只是一个提示。很高兴这有帮助。“真正的解决办法”是什么?@itro我的答案并不完整,只是一个暗示。很高兴这有帮助。“真正的解决办法”是什么?