为什么我在jnlp中得到UnsupportedClassVersionError?

时间:2009-05-29 20:14:56

标签: java-web-start jnlp

我在启动jnlp时抛出了UnsupportedClassVersionError,但是当我尝试从命令行运行相关的jar文件时,一切正常。我尝试使用签名/未签名的jar文件将j2se版本设置为1.5 +,1.6 +,但所有这些都无济于事。

我正在尝试使用两个支持jar文件(mysql-connector.jar和swingx.jar)启动我自己的jar文件。我的jar文件已在Eclipse中使用1.6合规性设置进行编译,并内置到带有ant的jar中。由于我可以使用java 1.6从命令行启动3个jar,我有点困惑,jnlp失败了。任何帮助表示赞赏。

这是jnlp文件:

<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File -->
<jnlp spec="1.5+" codebase="http://www.etc.com/p" href="demo-daily.jnlp">
 <information>
  <title>demo: daily stock charting utility</title>
  <offline-allowed/>
 </information>
 <security>
 </security>
 <resources>
  <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+" />
  <jar href="demo-daily.jar" main="true" />
  <jar href="swingx.jar" main="false" />
  <jar href="mysql-connector.jar" main="false" />
 </resources>
 <application-desc main-class="quipu.viewers.charts.stockcharts.daily"/>
</jnlp>

我得到的错误是:

java.lang.UnsupportedClassVersionError:.class文件中的错误版本号 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:675) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) 在java.net.URLClassLoader.access $ 100(URLClassLoader.java:56) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:188) at com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:256) 在java.lang.ClassLoader.loadClass(ClassLoader.java:316) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 在com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1052) 在com.sun.javaws.Launcher.run(Launcher.java:105) 在java.lang.Thread.run(Thread.java:613)

2 个答案:

答案 0 :(得分:1)

首先,打开一个CMD窗口或一个shell窗口(根据你正在使用的操作系统),然后输入:

java -version

确保您运行的版本是您希望运行的版本。然后,再次从命令行发出命令:

javaws http://host/path/to/your.jnlp

如果无法从命令行运行javaws,则必须找出它的安装位置并使用可执行文件的完整路径。在Windows下,这将类似于

C:\Program Files\Java\jre1.6.0_14\bin\javaws.exe

在Linux下可能是/usr/bin/javaws,也可能在另一个目录中。

我知道在Windows下,无论如何,当您运行任何Java Web Start应用程序时,JNLP加载程序都是从安装的最新Java版本开始使用的。或者至少它应该这样做。我没有在Linux(或MacOS)下进行过实验,看看它是如何工作的。但总是可能出现问题,当你启动JNLP时,你不小心运行了Java 1.5 JNLP启动器。

您始终可以尝试卸载并重新安装最新版本的Java,以确保正确安装最新版本。这可能会解决问题。您可能还需要检查$ PATH(或%PATH%)以确保路径中存在正确版本的Java。 (这并不总是必要的......但如果路径上有任何版本的Java,请确保它是您想要的版本。)检查环境变量JAVA_HOME以确保它指向您认为的位置。

答案 1 :(得分:0)

只是一个猜测,但更新开始标记以引用spec =“1.6 +”

<jnlp spec="1.6+" codebase="http://www.etc.com/p" href="demo-daily.jnlp">