jar-Datei mit SWT-Lib starten

Maddi1986

Grünschnabel
Hi zusammen!!

Habe ein Programm geschrieben mit SWT als grafischer Oberfläche. Nun möchte ich dies als Archiv zum laufen bekommen. Habe auch schon ein Archiv mit Jarkive erstellt.

Der Aufbau ist folgender:

--chat.jar
--gui​
--Fenster.class​
--GUI.class​
--swt.jar​
--Manifest​

Inhalt des Manifstes ist folgender:
Manifest-Version: 1.0
Main-Class: gui.GUI
Class-Path: swt.jar​

Wenn nun in der Eingabeaufforderung von Windows eingebe: java -jar chat.jar
erhalte ich die Fehlermeldung: Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3236 in java.library.path

Ich weiß daran das es an den *.dll Datei von SWT liegt. Nun habe ich im Internet gelesen, das man diese Dateien in das gleiche Verzeichnis kopieren soll, in der die *.jar-Datei liegt.
Wenn ich dies getann habe und nach erneuter Eingabe "java -jar chat.jar", erhalte ich nun die Folgenden Fehlermeldung:

Exception in thread "main" java.lang.IllegalArgumentException: Argument cannot be null
at org.eclipse.swt.SWT.error(SWT.java:3358)
at org.eclipse.swt.SWT.error(SWT.java:3297)
at org.eclipse.swt.SWT.error(SWT.java:3268)
at org.eclipse.swt.graphics.ImageLoader.load(ImageLoader.java:125)
at org.eclipse.swt.graphics.ImageDataLoader.load(ImageDataLoader.java:22)
at org.eclipse.swt.graphics.ImageData.<init>(ImageData.java:328)
at org.eclipse.swt.graphics.Image.<init>(Image.java:545)
at gui.Fenster.createGUI(Fenster.java:87)
at gui.Fenster.<init>(Fenster.java:21)
at gui.GUI.main(GUI.java:10)

Hat jemand eine Idee, an was dies liegen könnte?

MfG
Maddi1986
 
Hallo,

ich hab zwar noch nicht so viel mit SWT gemacht. Kann es sein, dass du Grafiken auf deiner Benutzer-Oberfläche hast?

Die musst du dann mit
Code:
ClassLoader.getSystemResource()
laden, falls diese sich auch im Jar-File befinden, weil diese sonst nicht gefunden werden.

Also mit Swing würde das so aussehen
Code:
ImageIcon icon = new ImageIcon(ClassLoader.getSystemResource("DieDatei.jpg"));

Also ich vermute, dass es bei dir an sowas liegt.

MFG

zEriX
 
Hallo,

das swt.jar musst du auch außerhalb des jars ablegen... oder einen jar Packer wie fatjar verwenden ... oder einen entsprechenden ClassLoader verwenden...

Gruß Tom
 
Weiß jemand wie ich es abändern muss,damit bei der jar-Datei der Fehler mit den Images nicht mehr kommt?

Habe es nun wie folgt:

Button button_login = new Button(shell, SWT.NONE);
button_login.setText("Login");
button_login.setImage(new Image(display, getClass().getResourceAsStream("../icons/agt_login.png")));​

MfG
Maddi1986
 
Also laut deiner oberen Beschreibung gibt es in deinem Jar-File keinen Ordner names icons. Ist dieser auch im Jar-Archive?
 
Entschuldige das habe ich vergessen im Post oben aufzuführen, aber die Images sind im jar-File. Der Aufbau ist nun foglender:

--chat.jar
--gui​
--GUI.class
--Fenster.class​
--icons​
--Verschiedene Images​


Die swt.jar habe ich aus dem Archiv genommen. Mein Manifest:
Manifest-Version: 1.0
Main-Class: gui.GUI
Class-Path: lib\swt_win.jar​


Folgender Fehler tritt auf, wenn ich mein jar-Archiv ausführen will:

Exception in thread "main" java.lang.IllegalArgumentException: Argument cannot be null
at org.eclipse.swt.SWT.error(SWT.java:3358)
at org.eclipse.swt.SWT.error(SWT.java:3297)
at org.eclipse.swt.SWT.error(SWT.java:3268)
at org.eclipse.swt.graphics.ImageLoader.load(ImageLoader.java:125)
at org.eclipse.swt.graphics.ImageDataLoader.load(ImageDataLoader.java:22)
at org.eclipse.swt.graphics.ImageData.<init>(ImageData.java:328)
at org.eclipse.swt.graphics.Image.<init>(Image.java:545)
at gui.Fenster.<init>(Fenster.java:21)
at gui.GUI.main(GUI.java:10)​

Dieser Fehler tritt aber nur auf, wenn ich die Dateien ins jar-Archiv gepackt habe.

MfG
Maddi1986
 
Also ich würde sagen, lass einfach hier mal die Punkte weg

Code:
../icons/agt_login.png

also

Code:
/icons/agt_login.png


MFG

zEriX
 
Jo danke es geht ;) Aber so ganz versteh ich es nicht wieso ich die .. weg gelassen werden müssen. Die Class-Dateien befinden sich im gui-Ordner und die Images im icons-Ordner auf der selben Ebene. Also muss ich doch eigentlich erst aus dem gui-Ordner mit .. "raus springen" und dann in den icons-Ordner wechseln. Kannst du mir das vielleicht kurz erläutern?
 
Zuletzt bearbeitet:
Du musst immer vom Classpath ausgehen und der ist nicht GUI sondern ein Ordner höher. Ich hoffe du verstehst was ich meine, weiß gerade nicht wie ich es besser erklären soll :)

MFG

zEriX
 
Zurück