Das Programm wurde mit einem neueren Java kompiliert, als es ausführt? Diese Meldung nennt sogar die Versionsnummern — man muss sie nur übersetzen.
Aufwand:
ca. 20 Min.
Das Symptom
Ein Java-Programm oder eine JAR-Datei lässt sich nicht starten und wirft sofort
eine java.lang.UnsupportedClassVersionError mit kryptischen Zahlen wie „class file
version 65.0“ gegen „up to 61.0“. Auf einem anderen Rechner läuft dasselbe Programm
dagegen problemlos.
Die „Layer 8“-Wahrheit
Java-Code wird zunächst in Klassendateien übersetzt, und jede dieser Dateien trägt
eine Versionsnummer — sie sagt, mit welcher Java-Generation sie erzeugt wurde. Die
Laufzeitumgebung liest diese Nummer beim Start und lehnt alles ab, was neuer ist,
als sie selbst versteht. Der Grund ist einfach: Eine ältere Umgebung kann die neuen
Sprachmerkmale einer neueren schlicht nicht kennen. Deshalb wurde das Programm mit
einem neueren Java gebaut, als hier zum Ausführen installiert ist.
Das Gute an diesem Fehler ist, dass er die Lösung fast mitliefert: Die beiden Zahlen
sind der ganze Streitpunkt. Ist die Kompilier-Version höher als die Laufzeit-Version,
gibt es genau zwei Wege — die Laufzeitumgebung auf ein passendes Niveau anheben oder
das Programm für ein älteres Ziel neu kompilieren. Häufig sind sogar mehrere
Java-Versionen installiert und nur die falsche ist aktiv; dann genügt es, über
JAVA_HOME und PATH die richtige nach vorn zu holen.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Die Meldung richtig lesen
Der Fehler nennt zwei Zahlen: eine „class file version“, mit der das Programm kompiliert wurde, und die, die die laufende Java-Umgebung versteht. Ist die erste höher, wurde mit einem neueren Java gebaut, als jetzt zum Ausführen bereitsteht — die alte Umgebung kann die neue Klassendatei nicht lesen.
2.
Die installierte Java-Version prüfen
Nachsehen, welche Java-Version tatsächlich zum Ausführen verwendet wird:
java -version
3.
Die Umgebung aktualisieren
Die direkteste Lösung: eine Java-Laufzeitumgebung installieren, die mindestens so neu ist wie die, mit der das Programm kompiliert wurde. Danach erneut ausführen.
4.
Die richtige Version aktiv schalten
Sind mehrere Java-Versionen installiert, wird oft die falsche verwendet. Die Umgebungsvariable JAVA_HOME auf die passende Version setzen und prüfen, dass der PATH auf dieselbe zeigt.
5.
Alternativ mit älterem Ziel kompilieren
Kann die Laufzeitumgebung nicht aktualisiert werden, das Programm für eine ältere Zielversion neu kompilieren (etwa über die Release-Option des Compilers). Dann läuft es auch auf der älteren Umgebung.
Häufige Fragen (FAQ)
?Was bedeutet die Zahl in der Fehlermeldung?
Sie nennt die Klassendatei-Version. Zum Beispiel steht 61 für Java 17, 65 für Java 21. Die Meldung sagt sinngemäß: Diese Datei wurde mit einer neueren Java-Version übersetzt, als die hier laufende lesen kann. Es ist kein Fehler im Programm, sondern eine reine Versionsfrage.
?Es sind mehrere Java-Versionen installiert. Wie schalte ich die richtige aktiv?
Unter Linux über update-alternatives, unter macOS über die Variable JAVA_HOME, unter Windows über den Pfad und JAVA_HOME. Prüfen Sie mit java -version, welche Fassung tatsächlich greift – nicht selten ruft die Kommandozeile eine andere auf als die Entwicklungsumgebung.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.
jcmd -l listet nichts oder nur sich selbst, obwohl die JVM läuft. Schuld ist fast immer der falsche Benutzer – und sudo macht es schlimmer, nicht besser.
SWSystemzerstörendjava.lang.OutOfMemoryError: Java heap space