0

我已经看到与此确切错误有关的其他问题,但它们似乎根本没有帮助。

我正在编写一个在 Linux 系统(如果我没记错的话是 CentOS)上运行的应用程序,该系统具有 Java 1.5 版本。我目前正在我的具有 Java 1.6 的 Mac OSX 系统上的 Eclipse IDE 上编辑程序。

我将项目编译成一个可运行的 .JAR 文件。当提示选择如何处理 Eclipse 中的库时,我选择“将选定的包提取到 .JAR 文件中”。

我知道 Eclipse 有自己的编译器,所以在项目设置中我将目标编译器更改为 Java 1.5 并重新构建。然后重新打包运行的jar文件。

但是,在目标机器上运行带有“java -jar file.jar”的 .JAR 文件时,我仍然会收到上述“错误的版本号”错误。

有人可以帮忙吗?

完整的错误是:

at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
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 java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

我只使用一个外部库 sun-javamail。

谢谢

4

2 回答 2

0

You either:

  • haven't recompiled everything with -target 1.5
  • haven't redeployed everything
  • are using third party JARs compiled for 1.6. The class named in the exception will tell you that.
于 2012-12-14T23:04:36.280 回答
0

您可能希望在类文件上运行 javap 命令并检查编译它的 JDK 的确切版本。

例如:

C:\>javap -verbose Main
Compiled from "Main.java"
public class Main extends java.lang.Object
  SourceFile: "Main.java"
  minor version: 0
  major version: 50
... 

以下是主要版本和jdk的映射

MajorVersion     JDK
51      J2SE 7
50      J2SE 6.0
49      J2SE 5.0

参考:类文件格式

于 2012-12-14T23:19:04.487 回答