SWT als jar auf Win und Linux

DOcean

Grünschnabel
Hallo,

ich habe hier ein SWT Projekt mit Eclipse erstellt.

Jetzt brauch ich mal Hilfe wie ich das Programm außerhalb von Eclipse zum Laufen kriege.

ABER sowohl unter Linux als auch unter Windows.

Am schönsten wären dann später einfach eine start.bat und eine start.sh und schon startet das Programm ohne irgendwelche dll oder sonstwas kopiere.

Also was muss alles in mein Archiv rein, damit es läuft?

Zur Zeit hab ich nur
Code:
<meinjar>.jar
drin
dann kommt aber
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Layout
beim Aufruf von
Code:
java -jar <meinejar.jar>

Die Beiträge hier behandeln zu dem Thema alle nur Windows nicht Linux....
 
Hallo,

du brauchst natürlich auch die swt.jar mit den passenden dll dateien. Die gibts alle auf eclipse.org zum download. Wenn es in Linux und Windows laufen soll, dann musst du halt das swt-Packet für Windows und für Linux hinzuzupacken.

MFG

zEriX
 
hab jetzt mal von http://www.eclipse.org/swt/ die beiden stable Versionen runtergeladen und alle .so, .dll .jar in mein Verzeichnis mit meiner .jar entpackt.

Dann das Manifest editiert:
Code:
Manifest-Version: 1.0
Main-Class: burnAVRburn
Class-Path: swt.jar

jar neu erstellt

Wenn ich jetzt
Code:
java -jar <meinjar.jar>
mache

kommt folgendes bei raus
Code:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3236 in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1030)
        at org.eclipse.swt.internal.Library.loadLibrary(Library.java:123)
        at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:22)
        at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63)
        at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54)
        at org.eclipse.swt.widgets.Display.<clinit>(Display.java:126)
        at burnAVRburn.main(burnAVRburn.java:299)
die Libary liegt aber im Verzeichnis (heißt libswt....so), d.h. ich muss dem jetzt noch sagen wo er die libary findet wie mach ich das?

EDIT:
ich probier mal gleich das neue aus DANKE für den Tip..

hab mir letzt http://download.eclipse.org/eclipse...load.php?dropFile=swt-3.3M7-gtk-linux-x86.zip
runtergeladen und was soll ich damit machen? einfach ins plugins verz. entpacken?
 
Zuletzt bearbeitet:
Nein aus dem zip einfach das swt.jar benutzen (am Besten passend umbennenen mit Versionsnummer, so weiss man irgendwann nicht mehr so recht was es war).

Auf deine andere Frage:
Du kannst deinem Programm beim starten mitgeben wo er nach libraries suchen soll mit
java -Djava.library.path=dlls -jar ......
 
ok unter linux geht es damit...

aber was ist mit win und mac (dann brauch ich ja eine andere swt.jar oder nicht)

EDIT:
ja brauch ich gerade unterm MAC getestet

EDIT:
hab beschlossen einfach 2 Versionen meines Progs zu veröffentlichen eine für win und eine für linux...

oder hat jmd noch eine Idee?
 
Zuletzt bearbeitet:
Hallo,

ich habe gerade dank diesem Beitrag erfolgreich meine Anwendung angepasst.
Ich schreibe dir einmal auf was genau ich getan habe.

Meine Anwendung lief vorher nur unter Windows.
Und zwar hatte ich vorher folgenden Aufbau:

Code:
-Root
    --lib
        - swt.jar
        - u.a.
    --meine Windows dll's von SWT
    --MANIFEST.MF
    --meine.jar

Nun habe ich den link von Zeja genommen und habe mir dort swt-3.3M7-win32-win32-x86.zip und swt-3.3M7-gtk-linux-x86.zip herunter geladen.

Diese habe ich entpackt und die jeweiligen swt.jars in swtwin.jar und swtlinux.jar umbenannt.

Im lib Ordner habe ich die swt.jar gelöscht und meine beiden neuen Jar- Dateien hinzugefügt.
Im Rootverzeichnis habe ich die dlls gelöscht da diese, wie zeja schrieb, in der jar enthalten sind.

Der Aufbau sah dann wie folgt aus:

Code:
-Root
    --lib
        - swtwin.jar
        - swtlinux.jar
        - u.a.
    --MANIFEST.MF
    --meine.jar

Habe dann meine Manifest geöffnet und
Class-Path: . lib\swt.jar
gegen
Class-Path: . lib\swtwin.jar lib\swtlinux.jar
ausgetauscht.

Dann habe ich eine neue Jar erstellt und konnte meine Anwendung Problemlos starten.

Ich hoffe das hilft dir etwas weiter. Bei MAC kann ich dir leider nicht weiter helfen..

:)
 
cool danke...

werd jetzt aber bei zwei Versionen bleiben, ist auch nicht gerade klein die jar von SWT...
 
Wenn die jars für verschiedene Betriebssysteme in dem Classpath aufgenommen werden, erkennt die Java Maschine dann selbständig, welche Version verwendet wird?

Helgeh
 
Eigentlich nicht. Die external API der Jars also die die man benutzt ist ja für beide Betriebssysteme gleich. Daher sollte Java eigentlich das erste Jar mit den gesuchten Klassen nehmen welches gefunden wird und das andere Ignorieren.

Ich benutze entweder Maven oder Ant buildscripts die dann für das gerade laufende Betriebssystem die passen Version meiner Applikation erstellen.
 
Zurück