Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: LästigUnsupportedClassVersionError

Java: UnsupportedClassVersionError

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. 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. 2.

    Die installierte Java-Version prüfen

    Nachsehen, welche Java-Version tatsächlich zum Ausführen verwendet wird:

    java -version
    
  3. 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. 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. 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.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWAnfängerfehlerError: Could not find or load main class

Java: Could not find or load main class

java findet die Startklasse nicht, obwohl die .class-Datei daneben liegt. Gefragt sind voll qualifizierter Klassenname und passender Klassenpfad.

SWLästig

jcmd findet keine Java-Prozesse

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

OutOfMemoryError: Java heap space

Der Java-Prozess läuft gegen sein Speicherlimit. Mehr Heap zu geben ist oft nur ein Pflaster – meist steckt ein Speicherleck dahinter.

SWSystemzerstörendjava.lang.OutOfMemoryError: Metaspace

java.lang.OutOfMemoryError: Metaspace

Der Heap ist halb leer, die JVM stirbt trotzdem. Metaspace liegt im nativen Speicher und hat eine eigene Grenze – ein größerer Heap hilft nicht.