【发布时间】: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