2012-12-14 70 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

相關問題