# Could not load SWT library



## Maxim6394 (6. Apr 2014)

Ich versuch jetzt seit 2 Tagen ein SWT Programm das ich erstellt hab als jar zu exportieren und zu starten. In eclipse läuft es ganz normal, hab beim Projekt unter Java Build Path bei Projects org.eclipse.swt.win32.win32.x86_64 und bei Libraries den Klassenordner org.eclipse.swt hinzugefügt + bei Native libary location die workspace org.eclipse.swt.win32.win32.x86_64 eingetragen.
In eclipse startet jetzt also das Programm, nur wenn ich es als jar exportiere und dann zu starten versuche, kommt der fehler: 
	
	
	
	





```
Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT li
brary. Reasons:
        no swt-win32-4333 in java.library.path
        no swt-win32 in java.library.path
        Can't load library: C:\Users\maxim\.swt\lib\win32\x86_64\swt-win32-4333.
dll
        Can't load library: C:\Users\maxim\.swt\lib\win32\x86_64\swt-win32.dll

        at org.eclipse.swt.internal.Library.loadLibrary(Library.java:331)
        at org.eclipse.swt.internal.Library.loadLibrary(Library.java:240)
        at org.eclipse.swt.internal.C.<clinit>(C.java:21)
        at org.eclipse.swt.widgets.Display.<clinit>(Display.java:138)
        at ButtonsTest.main(ButtonsTest.java:90)
```

Die library location zu der verwiesen wird ist übrigens leer.
Was kann ich da machen?


----------



## turtle (6. Apr 2014)

Sieht so aus, als ob versucht wird, die 32-bit Version zu laden.

Ich würde mal einen Breakpoint in Eclipse setzen und in der Debugger-View kann man auf die Zeile, die das Java-Programm startet, rechtsklicken und über Properties sich genau die Kommandozeile anschauen, die benutzt wird. 

Dieser Aufruf muss aus der Kommandozeile genau so aussehen.

Natürlich musst du ebenfalls prüfen, ob Java Eclipse genau dieselbe Version startet wie Java OS.


----------



## Maxim6394 (6. Apr 2014)

ok ich weis nicht genau in welcher zeile ich den Breakpoint setzen soll, aber die Command Line sieht jetzt so aus:

"C:\Program Files\Java\jre7\bin\javaw.exe" -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:54790 -Djava.library.path=C:\Users\maxim\workspace\org.eclipse.swt.win32.win32.x86_64 -Dfile.encoding=Cp1252 -classpath C:\Users\maxim\workspace\SwtTest\bin;C:\Users\maxim\workspace\org.eclipse.swt\org.eclipse.swt_3.102.1.v20130827-2021.jar;C:\Users\maxim\workspace\org.eclipse.swt.win32.win32.x86_64\bin;C:\Users\maxim\workspace\org.eclipse.swt mypackage.SwtTest

Ist damit was anzufangen?


----------



## Maxim6394 (6. Apr 2014)

turtle hat gesagt.:


> Sieht so aus, als ob versucht wird, die 32-bit Version zu laden.
> 
> Ich würde mal einen Breakpoint in Eclipse setzen und in der Debugger-View kann man auf die Zeile, die das Java-Programm startet, rechtsklicken und über Properties sich genau die Kommandozeile anschauen, die benutzt wird.
> 
> ...



Hab jetzt die swt libraries entfernt die ich drin hatte, dann swt-4.3-win32-win32-x86 gesaugt und hinzugefügt, jetzt bekomm ich immer nur den Fehler 

Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 32-bit SW
T libraries on 64-bit JVM


----------



## turtle (6. Apr 2014)

Ich han 0 Ahnung von swt, aber finde die Ausgabe verständlich:


> Cannot load 32-bit SWT libraries on 64-bit JVM


Die Libraries funzen "nur" mit einer 32-bit JVM. 

Also würde ich dafür neben der 64-bit Version zusätzlich eine 32-bit Version installieren. Musst nur drauf achten, alle Programme mit der 32-bit Vaiante zu laden.

Ich meine mich zu erinnern, das ich vor langer Zeit ebenfalls Treiber hatte, die nur in 32-bit funktionierten. Daher habe ich dafür ebenfalls die 32-bit JVM drauf gemacht.


----------



## Maxim6394 (6. Apr 2014)

turtle hat gesagt.:


> Ich han 0 Ahnung von swt, aber finde die Ausgabe verständlich:
> 
> Die Libraries funzen "nur" mit einer 32-bit JVM.
> 
> ...



Jetzt nach über nem Tag gehts endlich. Hab Java entfernt, dann 32 bit JDK gesaugt, 32 bit Eclipse geholt und die 32 bit SWT library.


----------



## dzim (7. Apr 2014)

Ähm... Naja. Wäre nicht notwendig gewesen: Wenn du die Plugin-Developer-Version von Eclipse verwendest, einfach das aktuelle Delta-Pack installieren und dann liegen die notwendigen nativen swt-Bundles in dessten plugin-Verzeichnis. Ist immer etwas frickelig, aber wenn man den Prozess einmal drauf hat ist es easy.
Bedenke einfach, das SWT *IMMER* die entsprechenden Library des jeweiligen Systems verwendet (bzw. eben der JVM). Für RCP-Anwendungen (also die, die auf Eclipse-OSGi- und -Oberflächen-Basis basieren), gibt beim build über die Product-Files einen entsprechenden Hacken, den man wählen kann (wenn man in der aktuellen Target-Platform (Window > Preferences > Plug-in Development > Target Platform) auch das zuvor genannte Delta-Pack installiert hat). Bei allen anderen musst du dass Manifest deiner selbständig lauffähigen Jar-Datei auf das korrekte SWT-File anpassen. Vielleicht auch möglich, zur Laufzeit zu machen. Der Bittorrent-Client Vuze bekommt das ja auch irgendwie hin...


----------

