为什么我在 jnlp 中收到 UnsupportedClassVersionError?
启动 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: Bad version number in .class file 在 java.lang.ClassLoader.defineClass1(本机方法) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:675) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:260) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:56) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:195) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:188) 在 com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:256) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:316) 在 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)
I get an UnsupportedClassVersionError thrown when launching jnlp, however when I try to run the relevant jar files from command line everything works fine. I tried setting j2se versions to 1.5+, 1.6+, using signed/unsigned jar files, but all that doesn't help.
I'm trying to launch my own jar file with two supporting jar files (mysql-connector.jar and swingx.jar). My jar file has been compiled with 1.6 compliance settings in Eclipse and built into a jar with ant. Since I can launch the 3 jars from command line using java 1.6 I'm a bit baffled that jnlp fails. Any help is appreciated.
Here is the jnlp file:
<?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>
The error I get is:
java.lang.UnsupportedClassVersionError: Bad version number in .class file
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)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:256)
at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1052)
at com.sun.javaws.Launcher.run(Launcher.java:105)
at java.lang.Thread.run(Thread.java:613)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,打开 CMD 窗口或 shell 窗口(根据您正在使用的操作系统而定)并键入以下内容:
以确保您正在运行的版本是您期望运行的版本。 然后,再次从命令行发出命令:
如果无法从命令行运行 javaws,则必须找出它的安装位置并使用可执行文件的完整路径。 在 Windows 下,这将类似于
在 Linux 下,它可能是
/usr/bin/javaws
或可能位于另一个目录中。我知道在 Windows 下,无论如何,当您运行任何 Java Web Start 应用程序时,都会使用安装的最新 Java 版本中的 JNLP 加载程序。 或者至少它应该这样做。 我还没有在 Linux(或 MacOS)下进行实验来了解它是如何工作的。 但总有可能出现一些问题,当您启动 JNLP 时,您会意外地运行 Java 1.5 JNLP 启动器。
您可以随时尝试卸载并重新安装最新版本的 Java,以确保正确安装最新、最好的版本。 这可能会解决问题。 您可能还需要检查 $PATH(或 %PATH%)以确保路径上有正确的 Java 版本。 (这并不总是必要的......但如果路径上有任何版本的 Java,请确保它是您想要的版本。)检查环境变量 JAVA_HOME 以确保它指向您认为的位置。
First, open a CMD window or a shell window (as appropriate to the OS you're using) and type this:
to ensure that the version you're running is the version you expect to be running. Then, again from the command line, issue the command:
If you cannot run
javaws
from the command line, then you'll have to find out where it's installed and use the full path to the executable. Under Windows, this will be something likeand under Linux it may be
/usr/bin/javaws
or it may be in another directory.I know under Windows, at any rate, when you run any Java Web Start app, the JNLP loader is used from the most recent Java version installed. Or at least it's supposed to do this. I haven't experimented under Linux (or MacOS) to see how it works there. But it's always possible that something has gotten messed up and when you launch a JNLP you are accidentally running a Java 1.5 JNLP launcher.
You can always try to uninstall and re-install the most recent version of Java to ensure that the latest and greatest version is properly installed. This may fix things. You may also want to check your $PATH (or %PATH%) to ensure that the correct version of Java is on the path. (This is not always necessary ... but if any version of Java is on the path, ensure that it's the version you want.) Check the environment variable JAVA_HOME to make sure it points where you think it does.
只是猜测,但更新开始标签以引用 spec="1.6+"
Just a guess, but update the opening tag to reference spec="1.6+"