it-swarm.com.de

java.lang.UnsupportedClassVersionError: Ungültige Versionsnummer in der .class-Datei?

Ich erhalte diese Fehlermeldung, wenn ich eine OpenSource-Bibliothek einführe, die ich aus der Quelle kompilieren musste. Nun zeigen alle Vorschläge im Web an, dass der Code in einer Version kompiliert und in einer anderen Version (neu bei alter Version) ausgeführt wurde. Ich habe jedoch nur eine Version von JRE auf meinem System. Wenn ich die Befehle ausführen:

$ 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)

und checke in Eclipse nach den Eigenschaften der Java-Bibliothek, ich bekomme 1.5.0_18

Daher muss ich etwas anderes schließen, innerhalb einer Klasse selbst, wirft die Ausnahme? Ist das überhaupt möglich?

139
grmn.bob

Ich habe gelernt, dass Fehlermeldungen wie diese normalerweise richtig sind. Wenn es nicht MÖGLICH (in Ihrem Kopf) sein könnte, was der gemeldete Fehler besagt, suchen Sie in einem anderen Bereich nach einem Problem ... und müssen erst Stunden später feststellen, dass die ursprüngliche Fehlermeldung tatsächlich richtig war.

Da Sie Eclipse verwenden, glaube ich, dass Thilo es richtig gemacht hat. Der wahrscheinlichste Grund, warum Sie diese Nachricht erhalten, ist, dass eines Ihrer Projekte 1.6 Klassen erstellt. Es spielt keine Rolle, ob Sie nur eine 1.5-JRE im System haben, da Eclipse einen eigenen Compiler (nicht javac) hat und nur eine 1.5-JRE benötigt, um 1.6 Klassen zu kompilieren. Es kann komisch sein, und eine Einstellung muss deaktiviert sein, um dies zuzulassen, aber ich habe es gerade geschafft.

Überprüfen Sie für das betreffende Projekt den Abschnitt Java-Compiler, Projekteigenschaften (normalerweise Alt + Enter). Hier ist ein Abbild eines Projekts, das für die Kompilierung von 1.6 konfiguriert ist, jedoch nur mit einer 1,5-JRE-Datei.

enter image description here

184
Joshua McKinnon

Haben Sie versucht, eine vollständige "Reinigung" durchzuführen und dann in Eclipse (Projekt-> Reinigung ...) neu zu erstellen? 

Können Sie "javac" und "Java" direkt von der Befehlszeile aus kompilieren und ausführen? Funktioniert das einwandfrei?

Wenn Sie mit der rechten Maustaste auf Ihr Projekt klicken, gehen Sie zu "Eigenschaften" und dann zu "Java Build Path". Gibt es unter einer der Registerkarten verdächtige Einträge? Dies ist im Wesentlichen dein CLASSPATH.

In den Eclipse-Voreinstellungen möchten Sie möglicherweise auch den Abschnitt "Installierte JREs" im Abschnitt "Java" noch einmal überprüfen und sicherstellen, dass er den Anforderungen entspricht, die Sie für richtig halten.

Sie haben definitiv entweder eine veraltete .class-Datei, die irgendwo herumliegt, oder Sie haben eine Kompatibilitäts-/Laufzeit-Übereinstimmung in den verwendeten Java-Versionen.

9

Hast du mit Eclipse kompiliert? Es verwendet einen anderen Compiler (nicht Javac). Das sollte nicht zu diesem Fehler führen (wenn alles richtig konfiguriert ist), aber Sie können versuchen, es mit javac zu kompilieren.

Wenn das Problem dadurch behoben wurde, prüfen Sie, ob Eclipse einige falsche Compilereinstellungen enthält. Soll speziell auf Java 5 abzielen.

5
Thilo

Ich habe auch den gleichen Fehler bekommen. Grund dafür war, dass ich das Projekt mit Maven kompilierte. Ich hatte Java_HOME, das auf JDK7 verweist, und daher wurde Java 1.7 zum Kompilieren verwendet. Beim Ausführen des Projekts verwendete ich JDK1.5. Durch Ändern des folgenden Eintrags in der .classpath-Datei oder der Änderung in Eclipse wie in der Abbildung wurde das Problem behoben.

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

oder ändern Sie die Laufkonfigurationen von Eclipse als  enter image description here

2
Vikky

Überprüfen Sie auch alle JAR-Dateien in Ihrem Projekt, die für eine höhere Java-Version kompiliert wurden. Wenn dies Ihre eigenen Bibliotheken sind, können Sie dies beheben, indem Sie das Zielversionsattribut in javac ändern

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

Überprüfen Sie immer auch das Offensichtliche. Ich habe diese Fehlermeldung einmal erhalten, als ich versehentlich die falsche Ressource für die Aktion Hinzufügen und Entfernen des Servers ergriff. Es kann leicht übersehen werden.

0
James Drinkard

Das Löschen der projektspezifischen Einstellungsdateien (Eclipse-Arbeitsbereich/Projektordner/.settings /) aus dem Projektordner ist ebenfalls möglich. Natürlich müssen wir ein Projekt nach dem Löschen reinigen und erstellen.

0
user3471219

ich habe dieses Problem gelöst, indem ich den für den Server erforderlichen Server geändert habe (in meinem Fall ist Tomcat) . Doppelklicken Sie auf der Registerkarte "Server" in Eclipse auf den Server (um die Seite für die Serverkonfiguration zu öffnen), klicken Sie auf Laufzeitumgebung und dann auf "Ändern" JRE erforderlich

0
ocrampico

Ändern des Projekts zur Verwendung von Java 1.7: Damit dies funktioniert, folgen Sie diesen Schritten:

  • Ändern Sie die Compiler-Konformitätsstufe
  • Ändern Sie Ihre JRE/JDK-Projekte auf ein und dasselbe Niveau (in meinem Fall 1.7)
  • Nehmen Sie dieselbe Änderung in allen Projekten vor, auf die in Ihrem Projekt verwiesen wird
  • Ändern Sie Ihre Run/Debug-Konfiguration, um das JRE/JDK (oder auf derselben Ebene) zu verwenden.

Funktioniert nicht? 

  • projekte löschen Bin-Verzeichnis
  • Sauber
  • neu aufbauen

Funktioniert immer noch nicht?

im Verzeichnis Ihres Projekts: Bearbeiten Sie .settings/org.Eclipse.jdt.core.prefs> Stellen Sie sicher, dass Ihre Zielebene angewendet wird

Viel Glück!

0
Li3ro

Ein anderes Szenario, in dem dies auftreten könnte, ist das Starten einer Instanz von Eclipse (für Debugging usw.) von einem Host-Eclipse aus. In diesem Fall hilft es nicht, die Projektebene oder die JRE-Bibliothek des Klassenpfads des Projekts zu ändern. Was zählt, ist die JRE, mit der die Zielumgebung von Eclipse gestartet wird.

0
Jay