Webstart应用程序中的条件java.lang.NoClassDefFoundError

时间:2014-09-05 10:33:14

标签: java java-web-start

我们在多个远程桌面服务器上运行了一个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。而且意外,没有错误!然后我再次尝试cd漂移,错误再次发生。我现在已经尝试了很多次,结果相同。因此,如果我得到NoClassDefFoundError,那么以某种方式从我启动javaws的路径有话要说。但c:\或c:\ drift都不包含任何.jar文件(尽管子目录可能)。我为此感到非常困惑。究竟是什么问题?我们的java版本是1.7.0_67

1 个答案:

答案 0 :(得分:0)

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