2

启动 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: java.lang.ClassLoader.defineClass1(Native Method) 的 .class 文件中的错误版本号 java.security.SecureClassLoader.defineClass(SecureClassLoader) 的 java.lang.ClassLoader.defineClass(ClassLoader.java:675) .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(Native Method) 在 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。启动器.run(启动器.java:105) 在 java.lang.Thread.run(Thread.java:613)

4

2 回答 2

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 以确保它指向您认为它所在的位置。

于 2009-05-29T23:42:27.450 回答
0

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

<jnlp spec="1.6+" codebase="http://www.etc.com/p" href="demo-daily.jnlp">
于 2009-05-29T20:23:46.620 回答