【问题标题】:Why do I get NoClassDefFoundError: java/awt/Desktop?为什么我会收到 NoClassDefFoundError:java/awt/Desktop?
【发布时间】:2012-02-19 10:34:25
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

  • 运行此代码的 JRE 的 java.version 是什么? Desktop 是 1.6+ 类。
  • 顺便说一句,这有 Swing 标记,但您提到了 WebLogic 服务器(服务器可能是“无头的” - 不允许使用 GUI)。这让我很困惑。此代码是在服务器上运行还是在远程客户端上运行?

标签: java swing exception weblogic noclassdeffounderror


【解决方案1】:

NoClassDefFoundError 上的文档

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

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

【讨论】:

  • @itro 我的回答并不完整,只是一个提示。很高兴它有帮助。 “真正的解决办法”是什么?
【解决方案2】:

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

由于 Desktopjre 的一部分,请确保您的 classpath 包含对 jre 库的引用。

Eclipse 中,您可以转到 运行配置 --> Classpath 并在那里查看

更新:

正如 Andrew 建议的那样,您还可以检查您是否至少拥有 java 1.6

【讨论】:

  • 如果 JRE 不在类路径中,将找不到 URI
  • 你确定吗?我认为 JRE 库只需要在 Java 的第一个版本的 CLASSPATH 中。
  • @AndrewThompson 可能他的类路径是无序的,其中一个 jar 包含不完整的 jre,这是找到 URI 的位置
  • @AndrewThompson 另外,您如何确定 URI 来自 jre 而不是来自他创建的类或另一个 jar?
  • “你怎么确定URI来自jre” 当方法实际指定一个URI时,OP提到了URL。我怀疑那个级别的人会使用 URI 类的自定义版本。我什至会给你 100:1 的赔率。 ;)
【解决方案3】:

java.awt.Desktop 已被介绍为in Java 6。您在不同的 JRE 版本上运行代码的可能性很高。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2016-08-21
    • 2014-07-04
    • 2020-06-06
    • 2018-12-26
    • 2021-03-05
    • 2013-07-13
    相关资源
    最近更新 更多