Java Desktop-Anwendung: SWT vs. Swing [geschlossen]

158

Ich bin tagsüber Webentwickler und denke darüber nach, meine erste echte Desktop-Anwendung zu erstellen. Die Idee ist, ein Tool zu erstellen, das eine sich sehr wiederholende Aufgabe in einer Webanwendung automatisiert, in der keine API verfügbar ist.

Ich weiß, dass ich Java verwenden möchte. Ich habe es zuvor für Web-Inhalte verwendet, kenne die Syntax ziemlich gut und möchte, dass die Anwendung plattformübergreifend so einfach wie möglich ist.

Ich bin mir nicht so sicher, ob ich SWT oder Swing verwenden soll. Da mein Hauptpublikum Windows verwendet, möchte ich es dort so nativ wie möglich gestalten. Linux und Mac sollten funktionieren, aber das Aussehen ist hier nicht so wichtig.

Was sind die Argumente für und gegen jedes UI Framework, Swing oder SWT?

Vielen Dank.

PS: Ich entwickle unter Windows mit Eclipse. Aber ich dachte darüber nach, mit Netbeans zu spielen.

Janpio
quelle
Schwierige Frage. :-) Ich würde mit Swing gehen. Haben Sie jedoch keine PRO oder CONs für diese Entscheidung.
Pablo Santa Cruz
Duplikat Q. Bitte suchen Sie nach Swing vs. SWT Qs, die bereits auf SO gefragt wurden. FWIW, ich benutze Swing, nur weil ich so gelernt habe. Es gibt native Look-and-Feel-Bibliotheken (siehe jgoodies Looks)
Jason S
"Erstellen Sie ein Tool, das eine sich sehr wiederholende Aufgabe in einer Webanwendung automatisiert" - Informationen dazu? Möglicherweise gibt es ein vorhandenes Tool - und ich bezweifle, dass eine Desktop-App erforderlich ist, um dies zu automatisieren - es funktioniert möglicherweise gerade in Ihrem Fall - aber was ist, wenn Sie zu einer gehosteten Lösung wechseln?
Nate
Sie müssen kein GUI-Framework für eine Desktop-App erlernen. Wenn Sie HTML-CSS und JS verwenden können (was ich davon ausgehe, dass Sie es sind), können Sie mit Electron native Apps mit Web-Sprachen erstellen.
Pranav A.
Electron wurde ein paar Jahre nachdem ich diese Frage gestellt hatte erfunden;) Aber heute haben Sie natürlich Recht.
Janpio

Antworten:

152

Pros Swing:

  • Teil der Java-Bibliothek, keine zusätzlichen nativen Bibliotheken erforderlich
  • funktioniert auf allen Plattformen gleich
  • Integrierter GUI-Editor in Netbeans und Eclipse
  • gute Online-Tutorials von Sun / Oracle
  • Unterstützt von offiziellen Java-Erweiterungen (wie Java OpenGL)

Nachteile Swing:

  • Das native Erscheinungsbild kann sich anders verhalten als das echte native System.
  • Schwere Komponenten (native / awt) verbergen Swing-Komponenten, was die meiste Zeit kein Problem darstellt, da die Verwendung schwerer Komponenten eher selten ist

Vorteile SWT:

  • verwendet nach Möglichkeit native Elemente, also immer natives Verhalten
  • unterstützt von Eclipse, GUI-Editor VEP (VEP unterstützt auch Swing und AWT)
  • große Anzahl von Beispielen online
  • hat eine integrierte awt / swt-Brücke, um die Verwendung von awt- und Swing-Komponenten zu ermöglichen

Nachteile SWT:

  • erfordert native Bibliotheken für jedes unterstützte System
  • unterstützt möglicherweise nicht jedes Verhalten auf allen Systemen, da native Ressourcen verwendet werden (Hinweisoptionen)
  • Verwalten nativer Ressourcen, während native Komponenten häufig zusammen mit ihren übergeordneten Ressourcen entsorgt werden. Andere Ressourcen, z. B. Schriftarten, müssen manuell freigegeben oder als Entsorgungslistener für eine Komponente zur automatischen Freigabe registriert werden.
josefx
quelle
33
Swing ist näher an "einmal schreiben, überall laufen". SWT wird eher wie "einmal schreiben, überall optimieren / testen" sein. Aber diese Diskussion fand auch mit anderen Sprachen statt.
Mark
12
Realistisch gesehen verhält sich das "native" Erscheinungsbild von Swing erheblich anders als auf meinem Gnome-Desktop - während die Themen aus irgendeinem Grund recht gut funktionieren, sehen die Menüs schrecklich aus und sind fast unbrauchbar.
Hut8
9
Ab Eclipse 3.7 wurde VEP durch WindowBuilder ersetzt (das auch Swing und SWT unterstützt).
Alexey Romanov
6
Der Vorteil von SWT ist auch ein geringerer Speicherbedarf aufgrund nativer Komponenten. Dies sollte auf Maschinen mit begrenztem Speicher wünschenswert sein, und Speicherunterschiede zwischen Swing und SWT können bei großen GUI-Designs groß sein.
Jantobola
1
@ JanTobola Es ist einfach falsch. Native Komponenten verwenden den auf dem nativen Heap zugewiesenen Speicher, nicht nur auf dem Java-Heap. Ich habe an großen GUIs mit Netbeans Platform, Eclipse RCP, SWT und Swing gearbeitet. In sehr frühen Java-Versionen gab es einige ernsthafte Bedenken hinsichtlich des Speicherbedarfs in Swing (als es sich um eine Drittanbieter-Bibliothek handelte und nach 1.1 bis 1.2? ), aber es ist nicht mehr wahr und es liegt an den Entwicklern, viele Ressourcen in SWT freizugeben. Es gibt viel mehr Möglichkeiten für Speicherverluste bei SWT, während eine nicht referenzierte Komponente bei Swing "entsorgt" wird.
Gouessej
63

Es ist wichtig zu berücksichtigen, dass einige Benutzer und einige Wiederverkäufer (Dell) eine 64-Bit-VM auf ihrem 64-Bit-Windows installieren und Sie nicht dieselbe SWT-Bibliothek auf 32-Bit- und 64-Bit-VMs verwenden können.

Dies bedeutet, dass Sie verschiedene Pakete verteilen und testen müssen, je nachdem, ob Benutzer über eine 32-Bit- oder eine 64-Bit-Java-VM verfügen. Sehen Sie dieses Problem beispielsweise bei Azureus, aber Sie haben es auch bei Eclipse, wo die Builds auf der vorderen Download-Seite ab heute nicht mehr auf einer 64-Bit-VM ausgeführt werden.

Ludovico Fischer
quelle
2
Interessanter Punkt. Als Benutzer bin ich immer noch erschüttert, warum dies so eine große Sache ist. Aber gut, es ist so, dass ich das berücksichtigen muss. Vielen Dank.
Janpio
Übrigens: Javaws (Webstart) ist nicht verfügbar für 64 IMHO
Karussell
1
@Karussell: Ab dem 04.03.2011 unterstützt Suns 64-Bit-JVM für Windows JNLP. Ich denke, das ist schon eine Weile so, aber ich bin mir nicht sicher, wie lange.
Der Alchemist
23

Pro Swing:

  • Der größte Vorteil von Swing IMHO ist, dass Sie die Bibliotheken nicht mit Ihrer Anwendung versenden müssen (wodurch ein Dutzend MB (!) Vermeidet).
  • Einheimisches Erscheinungsbild ist für Swing viel besser als in den Anfangsjahren
  • Leistung ist vergleichbar mit swt (Swing ist nicht langsam!)
  • NetBeans bietet Matisse als komfortablen Komponentenhersteller an.
  • Die Integration von Swing-Komponenten in JavaFX ist einfacher.

Aber unter dem Strich würde ich nicht empfehlen, 'pure' Swing oder swt zu verwenden ;-) Es gibt verschiedene Anwendungs-Frameworks für Swing / swt out. Schau hier . Die größten Spieler sind Netbeans (Swing) und Eclipse (Swt). Ein weiterer schöner Rahmen könnte Griffon sein und ein schöner Satz von Komponenten ist Pivot (Swing). Griffon ist sehr interessant, weil es viele Bibliotheken integriert und nicht nur Swing ; auch Pivot, SWT usw.

Karussell
quelle
1
Ja, NetBeans hat Matisse als GUI-Builder, aber der Code ist sehr ausführlich, verwirrend zu lesen und so gut wie unmöglich per Quellcode zu bearbeiten. Wenn Sie wirklich einen GUI-Builder wollen, gehen Sie mit Finsternissen WindowBuilder
Pranav A.
13

Ich würde Swing aus mehreren Gründen benutzen.

  • Es gibt es schon länger und es wurden mehr Entwicklungsanstrengungen unternommen. Daher ist es wahrscheinlich mehr Funktionen vollständig und hat (vielleicht) weniger Fehler.

  • Es gibt viele Dokumentationen und andere Anleitungen zur Erstellung performanter Anwendungen.

  • Es scheint, als würden Änderungen an Swing gleichzeitig auf alle Plattformen übertragen, während Änderungen an SWT zuerst unter Windows und dann unter Linux angezeigt werden.

Wenn Sie eine sehr funktionsreiche Anwendung erstellen möchten, sollten Sie sich NetBeans RCP (Rich Client Platform) ansehen. Es gibt eine Lernkurve, aber Sie können mit ein wenig Übung schnell schöne Anwendungen zusammenstellen. Ich habe nicht genug Erfahrung mit der Eclipse-Plattform, um ein gültiges Urteil zu fällen.

Wenn Sie nicht das gesamte RCP verwenden möchten, bietet NetBeans auch viele nützliche Komponenten, die herausgezogen und unabhängig voneinander verwendet werden können.

Ein weiterer Ratschlag: Schauen Sie sich verschiedene Layout-Manager an. Sie haben mich lange gestolpert, als ich gelernt habe. Einige der besten sind nicht einmal in der Standardbibliothek. Die Tools MigLayout (sowohl für Swing als auch für SWT) und JGoodies Forms gehören meiner Meinung nach zu den besten.

clartaq
quelle
10

Ich würde Swing wählen, nur weil es für Java "heimisch" ist.

Schauen Sie sich außerdem http://swingx.java.net/ an .

auf Null gesetzt
quelle
1
Link ist kaputt!
Sokrates
8

Für Ihre Anforderungen klingt es so, als würde Swing unter dem Strich verwendet werden, da der Einstieg etwas einfacher ist und nicht so eng in die native Plattform integriert ist wie SWT.

Swing ist normalerweise eine sichere Wette.

Yuval Adam
quelle
6

Interessante Frage. Ich kenne SWT nicht so gut, um damit zu prahlen (im Gegensatz zu Swing und AWT), aber hier ist der Vergleich von SWT / Swing / AWT.

http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

Und hier ist die Seite, auf der Sie ein Tutorial zu praktisch allem auf SWT erhalten können ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm ).

Ich hoffe, Sie treffen eine richtige Entscheidung (wenn es richtige Entscheidungen bei der Codierung gibt) ... :-)

Buhake Sindi
quelle
4
Beachten Sie jedoch, dass der Artikel aus dem Jahr 2003 stammt ...
Alexey Romanov
4

Wenn Sie eine voll funktionsfähige Anwendung mit mehr als einer Handvoll Funktionen erstellen möchten, empfehle ich, Eclipse RCP als Framework zu verwenden.

Wenn Ihre Anwendung nicht zu groß wird oder Ihre Anforderungen einfach zu einzigartig sind, um von einem normalen Geschäftsframework verarbeitet zu werden, können Sie sicher mit Swing springen.

Am Ende des Tages würde ich Ihnen empfehlen, beide Technologien auszuprobieren, um den für Sie besseren zu finden. Wie bei Netbeans vs Eclipse vs IntelliJ gibt es hier keine absolut richtige Antwort und beide Frameworks haben ihre eigenen Nachteile.

Pro Swing:

  • mehr Experten
  • mehr Java-ähnlich (fast kein öffentliches Feld, keine Notwendigkeit, über Ressourcen zu verfügen)

Pro SWT:

  • mehr Betriebssystem nativ
  • schneller
Nanda
quelle
10
Ich denke, der "schnellere" Punkt ist sehr umstritten.
Russ Hayward
Die Verwendung von SWT ist umständlich. Ich musste meine GUI mit jeder Windows-Version testen. Einige Fehler waren nur unter Windows Vista reproduzierbar. Einige Methoden sind einfach nicht implementiert oder rufen AWT unter der Haube auf, was bedeutet, dass Sie eine kompakte JRE ohne AWT und Swing nicht verwenden können, ohne das Risiko einzugehen, SWT zu brechen. Ich habe 2009 angefangen, SWT zu verwenden und meiner bescheidenen Meinung nach ist es nicht schneller. Ich rate Ihnen, einen sorgfältig ausgearbeiteten Benchmark bereitzustellen.
Gouessej
4

Eine Sache zu beachten: Screenreaders

Aus bestimmten Gründen funktionieren einige Swing-Komponenten bei Verwendung eines Screenreaders (und der Java AccessBridge für Windows) nicht gut. Wissen Sie, dass unterschiedliche Screenreader zu unterschiedlichem Verhalten führen. Und meiner Erfahrung nach schneidet der SWT-Tree in Kombination mit einem Screenreader viel besser ab als der Swing-Tree. Daher wurden in unserer Anwendung sowohl SWT- als auch Swing-Komponenten verwendet.

Für das Verteilen und Laden der richtigen SWT-Bibliothek ist dieser Link möglicherweise hilfreich: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

incomudro
quelle
3

SWT wurde als Reaktion auf die Trägheit von Swing um die Jahrhundertwende entwickelt. Jetzt, da die Leistungsunterschiede vernachlässigbar werden, ist Swing meiner Meinung nach eine bessere Option für Ihre Standardanwendungen. SWT / Eclipse hat ein schönes Framework, das bei vielen Kesselplattencodes hilft.

Oliver Watkins
quelle