2012-12-14 71 views
0

我已经看到有关此确切错误的其他问题,但它们似乎没有任何帮助。Java错误:.class文件错误中的版本号错误

我编写的应用程序在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) 

我只用使用一个外部库,太阳的JavaMail。

谢谢

+0

请打印完整的错误。关于你的问题,我有两个想法,但我不完全确定atm。 – Colton

+0

谢谢。将在几分钟内完成。 –

+0

*“当提示选择如何处理库”*什么库?你还要重新编译它们,还是只将这些类放入最终的Jar中? –

回答

0

您:

  • 没有重新编译一切与-target 1.5
  • 使用编译为1.6第三方JAR文件还没有重新部署一切。在例外中命名的类将告诉你。
+0

这是问题所在。看来我使用的编译为1.6的javamail库,在1.5目标的程序中。尽管如此,我还没有找到替代品。 –

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

相关问题