Ich erhalte einen seltsamen Fehler, wenn ich versuche, dieses Programm auszuführen. Die Klasse kompiliert in mehrere .class-Dateien und ich kompilierte es letzte Woche (vor der Bearbeitung) einfach gut. Aber jetzt sehe ich das:
%Vor%Nach dem, was ich gesucht habe, könnte Java 6 Build 1.5 es beheben, da es zusätzliche Bytes am Ende der Klassendateien erlaubt (glaube ich), aber ich würde lieber Build 1.6 verwenden.
Ich bearbeite Windows und füge dann die .java-Dateien per FTP zu einem OpenVMS-Rechner, wo ich sie dann kompiliere. Nach dem Kompilieren verschiebe ich die .class-Datei in ein Verzeichnis, das durch das Explodieren der vorherigen JAR-Datei erstellt wurde, und re-jar.
Irgendwelche klaren Ideen, wie das passiert ist oder wie man es beheben kann?
Das Problem wurde gelöst, indem alle Zeilen-Feeds aus der .java-Datei entfernt und richtig umbenannt wurden (OpenVMS wird standardmäßig in Kleinbuchstaben geschrieben, sofern nicht anders angegeben)
Leider ein Fehler meinerseits, indem ich nicht zwischen jedem teste, aber zumindest funktioniert es.
Kurz gesagt:
-Line-Feeds sind schlecht AND Ordnen Sie Dateien richtig zu (Java-Standards nicht OS-Standards)
Dies ist in der Tat nicht zulässig gemäß VM Spec 4.9.1 :
Die Datei
class
darf nicht gekürzt werden oder am Ende zusätzliche Bytes haben.
Dies kann auftreten, wenn eine Inkompatibilität zwischen Java-Compiler und Java-Laufzeitumgebung besteht. Überprüfen Sie beide Versionen und stellen Sie sicher, dass Sie für die richtigen Laufzeitversionen kompilieren. I.e. Die kompilierte Klasse kann mit derselben oder einer neueren Laufzeitversion verwendet werden, aber nicht immer mit älteren Laufzeitversionen. Überprüfen Sie die Versionen mit java -version
und javac -version
.
Eine weitere häufige Ursache ist, dass die Datei bei der Dateiübertragung (FTP) zwischen verschiedenen Computern beschädigt wird. Diese Übertragung sollte im Binärmodus und nicht im Textmodus erfolgen.
Eine andere mögliche Ursache ist ein Hardwarefehler, z. Festplatte / Datei / Speicher korrupt. Versuchen Sie es erneut zu kompilieren oder einen anderen Computer.
Zur Klarstellung: Dies passiert, nachdem Sie alle alten .class-Dateien entfernt und auf dem gleichen Computer neu kompiliert haben.
Oder kompilieren Sie auf einem Computer und kopieren die Dateien dann in einen anderen? Wenn das der Fall ist, ist es wahrscheinlich, dass Ihre Dateiübertragungssoftware die Dateien beschädigt (Windows & lt; - & gt; Linux ist ein üblicher Täter, meistens durch Hinzufügen / Entfernen eines 0x0D Bytes, aber gelegentlich durch Hinzufügen eines 0x1A DOS EOF Markers) .
Ich vermute, dass Sie, wenn Sie Ihren Prozess überprüfen, feststellen, dass Sie irgendwo die Dateien außerhalb von Java ändern. Es gibt keinen Grund - selbst Versionsänderungen - für eine Datei, die von einem gültigen Java-Compiler erzeugt wird, um zusätzliche Bytes am Ende zu haben.
Ich habe diese Ausnahme nur während der Entwicklung festgestellt. Es scheint mir, dass Eclipse ECJ (Eclipse Luna) dieses Verhalten induziert. Für mich hat ein sauberer Build das Problem gelöst.
Ich hatte ein ähnliches Problem. Ich habe gerade versucht, eine Klasse auf meinem Büro-PC zu schreiben und auf unseren Client-Server zu übertragen, um etwas & lt; weil es auf dieser Maschine kein JDK gab. Ich benutzte die gleiche Version von Java auf beiden Maschinen, aber nach einer Übertragung habe ich diese Ausnahme. Ich habe versucht, Archiver vor dem Übertragen zu verwenden und es hat geholfen.