snoopysalive
Mitglied
Hallo, zusammen!
Ich bekomme hier von Eclipse und Java gerade 'nen richtig dicken Hals, weil ich einfach nicht herausfinde, was Eclipse beim Starten einer Java-Applikation anders macht als ich. Hier mal das konkrete Problem:
Ich habe jetzt eine Woche an einer speziellen Stapelverarbeitung zur Bildmanipulation gearbeitet und nun ist dieses Java-Programm fertiggestellt.
Weil ich die grafische Programmierung mit dem SWT dem AWT und Swing vorziehe, verwende ich eben dieses, was unter Eclipse auch kein Problem darstellt: Ich gebe im Build Path einfach an, wo sich die SWT-Bibliothek befindet, und es ist gut.
Ich selber arbeite an einem Macintosh (OS X 10.5.7, Java 1.6.0_13, SWT 3.5 x86_64), das Programm soll aber auch unter Windows laufen. Also mache ich es einfach so, dass ich alle kompilierten Quelldateien in ein ausführbares JAR-File packe und im Manifest angebe, wo im Zielordner sich die SWT-Bibliothek befindet. Auf diese Weise kann ich Windows und Mac bedienen, indem ich einfach nur die Dateien im Bibliotheksverzeichnis auswechsle.
Das funktioniert soweit auch ganz gut. Das Programm ist korrekt implementiert und läuft unter Eclipse einwandfrei sowohl unter Vista als auch unter OS X. Also exportiere ich das Projekt mit Eclipses JAR-Exportier-Funktion und erhalte den besagten Ordner.
Wenn ich nun das JAR-File per Doppelklick ausführe, öffnet sich zwar noch das Hauptfenster, aber danach ist Schluss – das Programm hängt sich auf und kann nur noch extern beendet werden.
Also folgt nun im Terminal der Aufruf über java -jar. Das Programm schmiert nun wieder nach Öffnen des Hauptfensters ab, aber dieses Mal bekommt es die Möglichkeit, mir auf dem Terminal mitzuteilen, dass ein „Invalid thread access“ aufgetreten sei (eigentich gut zehn Stück).
Diese Fehler treten normalerweise nur dann unter SWT auf, wenn auf eine GUI-Komponente innerhalb eines Threads zugegriffen wird, ohne den Zugriff über Display.syncExec() bzw. Display.asyncExec() durchzuführen. Das kann aber schlicht nicht sein, weil mein Programm unter Eclipse ja noch einwandfrei gelaufen ist.
Nachdem ich aber bis jetzt noch nirgends herausfinden habe können, wie Eclipse nun genau ein Java-Programm aufruft („java -jar Programm.jar“ scheint es jedenfalls nicht zu sein, denn sonst bekäme ich ja auch unter Eclipse die besagten Fehler zu Gesicht).
Also, wie ruft Eclipse Java-Programme auf? Was kann ich tun, um mein Programm außerhalb von Eclipse zum Laufen zu bringen?
Danke,
Matthias
Ich bekomme hier von Eclipse und Java gerade 'nen richtig dicken Hals, weil ich einfach nicht herausfinde, was Eclipse beim Starten einer Java-Applikation anders macht als ich. Hier mal das konkrete Problem:
Ich habe jetzt eine Woche an einer speziellen Stapelverarbeitung zur Bildmanipulation gearbeitet und nun ist dieses Java-Programm fertiggestellt.
Weil ich die grafische Programmierung mit dem SWT dem AWT und Swing vorziehe, verwende ich eben dieses, was unter Eclipse auch kein Problem darstellt: Ich gebe im Build Path einfach an, wo sich die SWT-Bibliothek befindet, und es ist gut.
Ich selber arbeite an einem Macintosh (OS X 10.5.7, Java 1.6.0_13, SWT 3.5 x86_64), das Programm soll aber auch unter Windows laufen. Also mache ich es einfach so, dass ich alle kompilierten Quelldateien in ein ausführbares JAR-File packe und im Manifest angebe, wo im Zielordner sich die SWT-Bibliothek befindet. Auf diese Weise kann ich Windows und Mac bedienen, indem ich einfach nur die Dateien im Bibliotheksverzeichnis auswechsle.
Das funktioniert soweit auch ganz gut. Das Programm ist korrekt implementiert und läuft unter Eclipse einwandfrei sowohl unter Vista als auch unter OS X. Also exportiere ich das Projekt mit Eclipses JAR-Exportier-Funktion und erhalte den besagten Ordner.
Wenn ich nun das JAR-File per Doppelklick ausführe, öffnet sich zwar noch das Hauptfenster, aber danach ist Schluss – das Programm hängt sich auf und kann nur noch extern beendet werden.
Also folgt nun im Terminal der Aufruf über java -jar. Das Programm schmiert nun wieder nach Öffnen des Hauptfensters ab, aber dieses Mal bekommt es die Möglichkeit, mir auf dem Terminal mitzuteilen, dass ein „Invalid thread access“ aufgetreten sei (eigentich gut zehn Stück).
Diese Fehler treten normalerweise nur dann unter SWT auf, wenn auf eine GUI-Komponente innerhalb eines Threads zugegriffen wird, ohne den Zugriff über Display.syncExec() bzw. Display.asyncExec() durchzuführen. Das kann aber schlicht nicht sein, weil mein Programm unter Eclipse ja noch einwandfrei gelaufen ist.
Nachdem ich aber bis jetzt noch nirgends herausfinden habe können, wie Eclipse nun genau ein Java-Programm aufruft („java -jar Programm.jar“ scheint es jedenfalls nicht zu sein, denn sonst bekäme ich ja auch unter Eclipse die besagten Fehler zu Gesicht).
Also, wie ruft Eclipse Java-Programme auf? Was kann ich tun, um mein Programm außerhalb von Eclipse zum Laufen zu bringen?
Danke,
Matthias