Ich habe mit SWT noch nie gearbeitet sondern mit Swing. Doch habe ich in den letzten Tagen etwas über OSGi und Eclipse RCP gelernt. Eine erste Applikation war auch erfolgreich. Auch mit NetBeans Plattform hab ich ein wenig gespielt. Jetzt kahmen mir ein paar Fragen zur SWT API.
Im grunde spricht besonders die Performancevorteile für SWT. Auch wenn in einigen Quellen wie bspw. Wikipedia behauptet wird, dass Swing diesbezüglich aufgeholt haben soll. Stelle ich auch heute mit Java 7 noch fest, dass Swing um einiges langsamer ist als SWT. Dafür lassen sich aber Swing Applikationen problemlos als JNLP aushändigen wohingegen für SWT dafür extra noch abhängige SWT Dateien in der JNLP berücksichtigt werden müssen. Wurde ein Betriebsystem nicht berücksichtig darauf aber eine JVM existiert, hat man schon wieder das Problem das extra dafür ein SWT compiliert werden muss und in der JNLP eingetragen. Oder wie bei RSSOwl wo auf der Download Seite unzählige ZIP Dateien für das jeweilige OS lagern nur damit eine SWT Datei zum OS kompatibel ist. Die SWT Jar Datei ist gerade mal 2.2 MB gross, dafür extra mehrere 25 MB grosse Packet für das jeweilge OS zu verfügung stellen scheint mir etwas übertrieben. :reflect:
Ich hab mir auch überlegt ob ich nicht die NetBeans GUI innerhalb eines Equinox OSGi einsetzen soll. Mir fehlt dazu einfach noch ein guter einstieg wie man das NetBeans UI System problemlos ausserhalb von NetBeans implementiert. Als NetBeans Module hatte ich schon erfolg, musste aber die ganze NetBeans Plattform mitschleppen. Beim Eclipse RCP bin ich da schon weiter, so das ich ohne Eclipse das ganze RCP ausschliesslich via xsbt verwalten kann. Also mit den üblichen Dateien
wird dann ein einfaches GUI mittels java -jar org.eclipse.osgi gestartet inkl. Fensterverwaltung. Wie man sieht bin ich halt noch etwas unentschlossen was die Wahl der GUI API angeht. Vieleicht helfen mir einige Antworten auf die oben gestellten Fragen zur entscheidungsfindung
- Ich hab gelesen das eine SWT Applikation auf möglichst viele Betriebsysteme getestet werden muss weil sich die native GUI oft unterschiedlich verhält. Ist das heute auch noch so? Oder verhalten sich SWT Applikationen heute wie Swing Applikationen und können nahtlos ohne vorherige Tests auf unterschiedlichen Betriebsysteme eingesetzt werden?
- Müssen SWT Widgets wirklich alle manuell gelöscht bzw. disposed werden? Weil das erinnert mich ein wenig an C/C++ wo man new und delete einsetzen musste. Oder gibts dafür wie oft in der Informationstechnologie eine elegante Lösungen? Bei Swing hat man das Problem nicht durch den GC.
- Für einige Betriebsysteme gibt es kein direktes SWT, bspw. für FreeBSD. Ich musste extra den Eclipse Port installieren nur um an die native SWT Jar Datei ran zu kommen. Deshalb stellt sich mir die Frage ob die compilierung der SWT nativen Lib einfach machbar ist, ohne extra ein ganzes Eclipse zu installieren. Bspw. direkt aus dem Quellcode.
Im grunde spricht besonders die Performancevorteile für SWT. Auch wenn in einigen Quellen wie bspw. Wikipedia behauptet wird, dass Swing diesbezüglich aufgeholt haben soll. Stelle ich auch heute mit Java 7 noch fest, dass Swing um einiges langsamer ist als SWT. Dafür lassen sich aber Swing Applikationen problemlos als JNLP aushändigen wohingegen für SWT dafür extra noch abhängige SWT Dateien in der JNLP berücksichtigt werden müssen. Wurde ein Betriebsystem nicht berücksichtig darauf aber eine JVM existiert, hat man schon wieder das Problem das extra dafür ein SWT compiliert werden muss und in der JNLP eingetragen. Oder wie bei RSSOwl wo auf der Download Seite unzählige ZIP Dateien für das jeweilige OS lagern nur damit eine SWT Datei zum OS kompatibel ist. Die SWT Jar Datei ist gerade mal 2.2 MB gross, dafür extra mehrere 25 MB grosse Packet für das jeweilge OS zu verfügung stellen scheint mir etwas übertrieben. :reflect:
Ich hab mir auch überlegt ob ich nicht die NetBeans GUI innerhalb eines Equinox OSGi einsetzen soll. Mir fehlt dazu einfach noch ein guter einstieg wie man das NetBeans UI System problemlos ausserhalb von NetBeans implementiert. Als NetBeans Module hatte ich schon erfolg, musste aber die ganze NetBeans Plattform mitschleppen. Beim Eclipse RCP bin ich da schon weiter, so das ich ohne Eclipse das ganze RCP ausschliesslich via xsbt verwalten kann. Also mit den üblichen Dateien
- Application.scala
- ApplicationActionBarAdvisor.scala
- ApplicationWorkbenchAdvisor.scala
- ApplicationWorkbenchWindowAdvisor.scala
- plugin.xml
wird dann ein einfaches GUI mittels java -jar org.eclipse.osgi gestartet inkl. Fensterverwaltung. Wie man sieht bin ich halt noch etwas unentschlossen was die Wahl der GUI API angeht. Vieleicht helfen mir einige Antworten auf die oben gestellten Fragen zur entscheidungsfindung