【问题标题】:Conditional java.lang.NoClassDefFoundError in Webstart applicationWebstart 应用程序中的条件 java.lang.NoClassDefFoundError
【发布时间】:2014-10-30 06:56:46
【问题描述】:

我们在多个远程桌面服务器上为许多客户运行了一个 webstart swing 应用程序。突然,在我们的一台服务器上,客户开始收到 java.lang.NoClassDefFoundError。不是在启动时,应用程序可以正常启动,但是在执行特定任务时,例如通过我们的软件发送邮件,它会像这样在控制台中弹出:

java.lang.NoClassDefFoundError: pos/MailSenderInterface
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    ......
Caused by: java.lang.ClassNotFoundException: pos.MailSenderInterface
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 56 more

问题是,这只发生在我们的一台服务器上。在所有其他服务器上,webstart 应用程序运行得很好!但是在这个单终端服务器上,我得到了错误,即使 java 版本是相同的,并且 jnlp 文件的链接是相同的。 我当然尝试在 java 控制面板中删除临时 Internet 文件,但无济于事。 然后我开始玩弄了一下,发现了一些很奇怪的东西。 我们的客户从指向 c:\drift 中的批处理文件的图标启动应用程序 此批处理文件仅包含以下内容:

@start javaws http://ourserver/ourapplication.jnlp

在批处理文件外键入链接会出现同样的错误。然后我输入 cd .. 以便我当前的路径是 c:\ 而不是 c:\drift 并从那里启动 javaws。令人惊讶的是,没有错误!然后我再次尝试 cddrift 并再次发生错误。我现在已经尝试了很多次,结果都是一样的。所以不知何故,如果我得到 NoClassDefFoundError,我从哪里开始 javaws 的路径有话要说。但 c:\ 或 c:\drift 都不包含任何 .jar 文件(尽管子目录可能)。我对此感到非常困惑。到底怎么了?我们的java版本是1.7.0_67

【问题讨论】:

  • 检查所需的jar是否在类路径中

标签: java java-web-start


【解决方案1】:

啊哈!路径 c:\drift\ 实际上有一个几年前的目录“pos”,带有旧版本的 MailSender.class 但没有 MailSenderInterface.class 删除此目录解决了问题。 :-) (请记住,错误是关于缺少 pos/MailSenderInterface) 显然,java 1.7.0_67 中最新的 javaws 会尝试从您启动 javaws 的位置的子目录中加载类(如果找到此类目录),而不是从正确下载的 jar 文件中加载文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2011-07-08
    • 2015-01-19
    相关资源
    最近更新 更多