# SWT: 3.1 nach 3.2 - nur Probleme!



## byte (19. Aug 2006)

Hallo,

ich habe nun zum zweiten Mal versucht, meine SWT-Anwendung mit SWT 3.2 zum Laufen zu kriegen - ohne Erfolg. Die Anwendung wurde mit SWT 3.1 entwickelt, also der Version von Eclipse 3.12 und läuft dort auch problemlos mit und ohne Eclipse. Doch wenn ich das Projekt in Eclipse 3.2 lade und die entsprechenden neuen SWT 3.2 Jars in den Build Path einbinde, kriege ich es einfach nicht zum Laufen.

Offenbar wurden einige interne SWT Klassen lustig zwischen den Jars vertauscht. Auf jeden Fall gab es Fehlermeldungen, dass eine Klasse EventManager fehlt, die offenbar mit Actions intern verknüpft ist. Nach etwas Recherche habe ich festgestellt, dass diese Klasse nun nicht mehr im core.runtime Jar ist sondern stattdessen im core.commands Jar. Nachdem ich diesen Fehler also behoben hatte, zeigt Eclipse keine Fehler mehr an. Aber beim Ausführen kriege ich trotzdem eine Fehlermeldung: Und zwar eine NoClassDefFound, dass folgende Datei fehlt:

_org/eclipse/core/runtime/IProgressMonitor_

Offenbar wurde auch diese Datei nun lustig verschoben. In SWT 3.12 liegt die Klasse noch im core.runtime Jar. Doch im 3.2 core.runtime fehlt sie. Wo zum Geier ist diese Datei nun?

Hat noch jemand solche Probleme beim Wechsel auf die neue SWT Version? Finds echt ärgerlich, dass da offenbar soviel umstrukturiert wurde.

MFG byto


----------



## Natorion (21. Aug 2006)

dumme frage, aber das ist mir schon passiert: benützt du die korrekte dll/so datei?


----------



## byte (21. Aug 2006)

So dumm finde ich die Frage gar nicht bei diesem ganzen Versions und Jar-Wirrwarr. 

Also die DLLs benutze ich aus dem Download von www.eclipse.org/swt. Wobei Da ja nicht alle Jars dabei sind. Die Jars benutze ich also aus dem Eclipse 3.2 Plugin Folder. KA ob das so richtig ist!? :roll:


----------



## Natorion (21. Aug 2006)

na ich mein die native libraries! die müssen im classpath liegen. versuch das mal.


----------



## KSG9|sebastian (21. Aug 2006)

ähm...auf www.eclipse.org/swt gibts das komplette SWT-Packet incl. der DLLs als Eclipse-Project zum downloaden.
Dazu musst du natürlich die korrekten jface-jars verwenden (falls du welche verwendest).
Dann natürlich aufpassen dass nicht mehrere swt-jars im Lib-Path liegen.

Gruß seb


----------



## byte (21. Aug 2006)

Ja das ist mir schon klar. Aber beim SWT 3.2 Download von besagter Seite ist nur die swt.jar dabei. Jedoch fehlt mir dann die Hälfte, z.B. der JFace Kram (den ich auch nutze). Deshalb verwende ich die Jars direkt aus Eclipse 3.2. Nur so richtig will es nicht funktionieren.

Naja, ich werde mein laufendes Projekt wohl mit Version 3.1 weiterentwickeln, bzw. es am Ende nochmal probieren zu portieren.


----------



## SamHotte (21. Aug 2006)

Lad' dir doch mal von hier die RCP-Runtime, da müsste der Rest (JFace, Core etc.) mit drin sein.


----------



## Wildcard (21. Aug 2006)

Ich kann immer noch nicht glauben das es Menschen gibt die freiwillig mit SWT außerhalb von Eclipse entwickeln  :shock:


----------



## SamHotte (21. Aug 2006)

Entwickelt wird innerhalb, aber für's Verteilen brauchste die Jars ...


----------



## Wildcard (21. Aug 2006)

Ich hab eigentlich für den Einsatz ausserhalb von Eclipse gemeint


----------



## SamHotte (21. Aug 2006)

Warum nicht? Die GUIs sind 'ne Ecke schneller als mit Swing, und einige Widgets hat Swing gar nicht -- wenn man (wie ich) z.B. gezwungen ist, noch mit Java 1.4 zu arbeiten ...


----------



## Wildcard (21. Aug 2006)

Die GUIs sind 'ne ecke schneller als schlechter Swing code, aber wenn mit Swing richtig implementiert wurde kann ich keinen großen Performance Unterschied feststellen.
Mir gefällt die SWT API nicht sonderlich, dieser ewige Krampf mit den Bitmasks und so weiter.
Mit JFace ist es dann benutzbar, aber die großen Vorteile von SWT sehe ich nicht (ausser vieleicht das nativere Look'n Feel unter Linux).


----------



## SamHotte (21. Aug 2006)

Hast du mal 'ne JList mit ein paar hundert Einträgen oder einen JTree mit mehreren tausend unter Swing benutzt? Bei mir ist das (subjektiv) ein gewaltiger Unterschied gegenüber den SWT/JFace-Pendants (WinXP, Java 1.4.2).


----------



## Wildcard (21. Aug 2006)

SamHotte hat gesagt.:
			
		

> Hast du mal 'ne JList mit ein paar hundert Einträgen ... unter Swing benutzt?


100000:
Ich seh da kein Problem:

```
public class Test extends JFrame
{
	public Test()
	{
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		String[] test = new String[100000];
		for(int i=0;i<test.length;i++)
			test[i]="test "+i;
		JList list = new JList(test);
		add(new JScrollPane(list));
	}
	
	public static void main(String[] args)
	{
		Test test = new Test();
		test.setSize(300, 500);
		test.setVisible(true);
	}
}
```


----------



## SamHotte (21. Aug 2006)

Hast gewonnen.  :applaus:


----------



## Wildcard (21. Aug 2006)

Oft wird Swing als langsam bezeichnet, da es nicht mehr reagiert, das ist aber kein Swing Problem, sondern falsche Programmierung. Wenn du eine komplexe Datenstruktur füllst (also zum Beispiel ein JTree mit einigen 1000 Einträgen, dann darf das *nicht im EventDispatcherThread passieren* sondern muss wie alles andere das zeitaufwändig ist *in einen eigenen Thread ausgelagert werden*


----------



## byte (22. Aug 2006)

Es ist ja nicht das Erzeugen der Komponenten, was einem in Swing träge vorkommt, sondern die Komponenten selbst, die halt von Java auf den Desktop gezeichnet werden. Ich hab SWT primär gewählt für dieses Projekt, weil ich native Widgets wollte und auch, um SWT einfach mal auszuprobieren. Ich geb Dir insofern recht, dass die SWT Library etwas eigenwillig ist. Es gibt sehr gute Teile, aber auch extrem lästige Sachen. Trotzdem fällt es mir mit SWT leichter, in kürzerer Zeit eine schöne GUI zusammenzustellen als mit Swing - einfach weil die meisten Widgets standardmäßig schon gut aussehen, ohne dass man noch was machen muss.

Im nächsten Projekt würde ich aber persönlich eher wieder Swing verwenden oder direkt Eclipse RCP. Gerade letzteres würde mich reizen und ich ärger mich ein wenig, dass ich es nicht schon bei diesem Projekt verwendet habe.


----------



## byte (29. Aug 2006)

Back to topic:

Ich konnte das Problem jetzt lösen! Also nochmal für alle, die Probleme haben, ihre SWT Anwendungen auf 3.2 zu bringen:

Ich brauchte folgende Jars aus dem Eclipse 3.2 Plugin Verzeichnis:

- org.eclipse.core.runtime... (wie gehabt)
- org.eclipse.jface... (wie gehabt)
- org.eclipse.swt... (wie gehabt)

- org.eclipse.core.commands... (falls es Probleme mit JFace Actions gibt!!)
- org.eclipse.quinox.common... (falls es beim Starten eine _NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor_ gibt)


----------

