2010-03-18 77 views
136

當我包含必須從源代碼編譯的開源庫時,出現此錯誤。現在,網絡上的所有建議都表明代碼被編譯爲一個版本,並以另一個版本(舊的新版本)執行。但是,我的系統上只有一個JRE版本。如果我運行命令:java.lang.UnsupportedClassVersionError:.class文件中的版本號錯誤?

$ javac -version 
javac 1.5.0_18 

$ java -version 
java version "1.5.0_18" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02) 
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode) 

,並在Eclipse檢查Java庫的屬性,我得到1.5.0_18

因此,我不得不得出結論別的東西,內部的類的本身,被扔例外??這甚至有可能嗎?

+2

您是否有位於其他地方的庫的編譯版本,可能首先在您的類路徑上? – 2010-03-18 00:45:36

+0

好主意,但沒有。我通過使用「查找」進行了檢查。 -name'* .jar'| xargs使用JAR從lib文件夾中找到'。另外,我沒有想到Eclipse使用CLASSPATH? 還有其他什麼好建議嗎? – 2010-03-18 01:13:18

+0

如何在cmd上使用這個find -name'* .jar'命令,因爲我正在尋找重新生成jre src代碼......並且爲此我需要啓動此cmd ..... http:// www。 javalobby.org/java/forums/t103334.html.....my jdk位於C:\ Program Files \ Java \ jdk1.6.0_31 – 2012-04-22 16:26:32

回答

183

我知道像這樣的錯誤信息通常是正確的。當它不可能(在你的想法中)被報告的錯誤是什麼時,你在另一個區域尋找問題......只是在幾小時後才發現原來的錯誤信息確實是正確的。

由於您使用的是Eclipse,我認爲Thilo是正確的您得到此消息的最可能原因是您的項目之一正在編譯1.6類。不要緊,如果系統上只有1.5 JRE,因爲Eclipse有它自己的編譯器(不是javac),只需要1.5 JRE編譯1.6類。 這可能很奇怪,並且需要取消選中一個設置以允許這樣做,但我只是設法做到了。

對於有問題的項目,檢查項目屬性(通常是Alt + Enter),Java編譯器部分。這是一個配置爲編譯1.6的項目的圖像,但只有1.5 JRE。

enter image description here

+0

完全同意......這就是爲什麼我在我的評論中詢問如何針對性的問題。我不知道Eclipse的內部類。該庫在命令行上用'javac'編譯並集成到我的Eclipse項目中。我將嘗試從命令行編譯我的項目。你顯然已經在過去解決了這個問題,你的建議非常棒。 – 2010-03-18 14:03:35

+3

如果你有JDK(有源代碼),你應該可以在Eclipse中添加一些斷點,並希望看到它試圖加載的類。最簡單的方法可能是UnsupportedClassVersionError(或者Eclipse異常斷點,'J!'圖標)的構造函數中的斷點,然後您可以檢查它是如何到達那裏的。 – 2010-03-18 14:54:32

+0

好的。我在大樓裏找到了一位專家,他能夠將Eclipse指向與我的命令行相同的JRE。然後我重建了1.6,並對1.6運行,這一切都工作。很顯然,我錯誤的是除了1.5之外沒有任何東西。他讓我看看在哪裏看。 感謝您的幫助 - 現在我正在解決我的下一個問題! :) – 2010-03-18 15:15:03

5

你用Eclipse編譯過嗎?它使用不同的編譯器(不是javac)。這不應該導致這個錯誤(如果一切正確配置),但你可以嘗試用javac編譯它。

如果這樣可以解決問題,請嘗試查看Eclipse是否有一些不正確的編譯器設置。具體來說,它的目標是Java 5.

+0

這就是我正在學習的東西。我將嘗試以同樣的方式構建這兩個部分(cmd行和/或eclipse)。 – 2010-03-18 14:05:54

+1

感謝Thilo,今天我學到了很多關於Eclipse和Java和類的版本。還有一點關於* ant *的。 – 2010-03-18 15:16:48

8

你有沒有嘗試做一個完整的「乾淨」,然後在Eclipse中重建(項目 - >清潔...)?

是否可以直接從命令行編譯並運行「javac」和「java」?這是否正常工作?

如果您右鍵點擊您的項目,請轉到「屬性」,然後轉到「Java構建路徑」,在任何選項卡下是否有任何可疑條目?這基本上是你的CLASSPATH。

在Eclipse首選項中,您可能還需要仔細檢查「Java」部分中的「已安裝的JRE」部分,並確保它與您認爲應該匹配。

你肯定有一個陳舊的.class文件放在某處,或者你正在使用的Java版本中遇到編譯時/運行時不匹配。

+0

是(完全清潔);沒有嘗試過(從cmd行項目);可能/沒有(我從Eclipse中刪除了條目「Java Build Path」);做到了這一點(JRE - 這是我獲得版本號的地方)。 – 2010-03-18 14:05:37

0

另一個場景,這可能發生的情況是,當你從一個主機日食推出的Eclipse的一個實例(用於調試等) - 在這種情況下,改變該項目的類路徑中項目的級別或JRE庫獨自一人無濟於事。重要的是JRE用於啓動目標eclipse環境。

1

還要檢查項目中已編譯爲更高版本的Java的任何jar文件。如果這是你自己的圖書館,你可以通過改變目標的版本屬性解決這個問題給javac

<javac destdir="${classes.dir}" 
      debug="on" classpathref="project.classpath" target="1.6"> 
0

務必檢查明顯了。當我意外地抓取服務器的添加和刪除操作的錯誤資源時,我得到了這個錯誤。它可以很容易忽略。

0

從項目文件夾中刪除項目特定的設置文件(Eclipse工作區/項目文件夾/ .settings /)也可以。 顯然,我們需要在刪除後做一個項目清理和構建。

2

我也有同樣的錯誤。我正在使用Maven編譯項目的原因。我有JAVA_HOME指向JDK7,因此Java 1.7正在用於編譯,並且在運行JDK1.5時使用該項目。在屏幕截圖中更改.classpath文件中的以下條目或更改eclipse可解決問題。

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5 

或在Eclipse的運行configuarions改變項目中使用的Java 1.7變化爲 enter image description here

0

:對於這項工作遵循這些步驟:

  • 更改編譯符合水平
  • 將您的項目JRE/JDK更改爲相同級別的東西(在我的情況下爲1.7)
  • 做同樣的改變項目由項目
  • 更改運行/調試配置爲使用JRE/JDK(或同級)

不工作參考?

  • 刪除項目的Bin目錄
  • 清潔
  • 重建

仍然無法正常使用?

在項目的目錄:編輯.settings/org.eclipse.jdt.core.prefs>請確保您的目標水平應用

祝您好運!

相關問題