Java错误:.class文件错误中的版本号错误

时间:2012-12-14 22:51:57

标签: java jar

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

我正在编写一个在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。

谢谢

2 个答案:

答案 0 :(得分:0)

你要么:

  • 没有使用-target 1.5
  • 重新编译所有内容
  • 尚未重新部署所有内容
  • 正在使用为1.6编译的第三方JAR。异常中指定的类将告诉您。

答案 1 :(得分: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

参考:Class file format