Welche Nachteile hat das Java Swing GUI Framework? [geschlossen]


10

Ich habe Java Swing für einige Desktop-Anwendungen verwendet. Aber ich habe andere GUI-Frameworks nicht so oft verwendet, daher kann ich sie nicht vergleichen.

Es gibt definitiv einige Dinge, die ich mit Swing mag und einige, die ich nicht mag, aber das ist die Situation bei fast allem.

Was sind die größten Nachteile des Java Swing GUI-Frameworks?


2
Die Frage ist interessant. Ich frage mich auch, was die Stärken und Schwächen von Swing im Vergleich zu QT, GTK, SWT, Winforms, Cocoa und dergleichen sind. Vielleicht sollten Sie den Titel umformulieren, um nach Vergleichen zu fragen , anstatt nach Nachteilen (die dazu neigen, nicht gut argumentierte Antworten zu bringen)
Barjak

Antworten:


3
  1. Sie müssen Java irgendwo installiert haben. Dies gilt natürlich für alle GUI-Frameworks, aber Java hat die Wahrnehmung eines 2-Tonnen-Gorillas. Es ist viel besser geworden, aber diese frühen Java-Applet-Tage haben viele Leute abgeschaltet. Wenn Sie es nur zum Ausführen Ihrer einen App benötigen, ist eine Menge Wartung erforderlich, um sie mit Sicherheitspatches und dergleichen auf dem neuesten Stand zu halten. Jeder muss Flash für Youtube haben, das .Net Framework wird hinter den Kulissen installiert und jeder hat Javascript in seinem Browser aktiviert. Java ist normalerweise eine zusätzliche Aufgabe.

  2. Obwohl es ein bisschen einmal geschrieben ist und überall ausgeführt wird, stellen Sie immer noch fest, dass Mac OSX nicht über dieses neue Produkt verfügt, das Sie verwenden möchten, oder dass ein Client sich weigert, sein Mandrake-Linux nach JRE 1.4 zu aktualisieren.

  3. Als Entwickler muss man über Threading nachdenken. Und es ist auf knifflige Weise, da Multithreading möglich ist, aber Swing so tut, als wäre alles Single-Threading. Aber dann hat die Hälfte der Bibliotheken, die Sie abrufen, ein gewisses Maß an Multithreading und geht davon aus, dass Sie sich mit EDT invokeLater auskennen, und es erzwingt viele Lektionen auf die harte Tour.

  4. Swing-Erfahrung lässt sich nicht einfach auf andere Arten der UI-Entwicklung übertragen. Wenn Sie sich beispielsweise mit Tabellen in CSS auskennen, werden Sie von Jtables, Renderern, Editoren usw. vollständig überlistet.

Im Allgemeinen besteht das Hauptproblem bei Swing darin, dass es nicht der Vermarktung entsprach. Es ist eine vollkommen adäquate Technologie für viele Anwendungsfälle, aber diese ersten 5 oder 6 Jahre waren voller schrecklicher Implementierungen und grausamer Applets. Und jetzt ist es alte Technik - weiter zu Web 3.0 oder was auch immer.

Alles in allem mag ich Swing und denke, dass die Vorteile im Allgemeinen die Nachteile überwiegen, wenn Sie das brauchen, was es bietet. Allerdings ist das Web-Erlebnis jetzt so allgegenwärtig, dass viele Benutzer es mit einer Web-App leichter haben werden als mit der optimiertesten erstaunlichen Swing-App. Und es gibt tolle Swing-Apps, aber sie scheinen kein Mainstream zu sein.


1
Ich bin in der gleichen Situation wie das OP: Ich kenne Swing und bin daran interessiert, es mit anderen GUI-Takedlits zu vergleichen. Für mich sind die Punkte 1, 2 und 4 für die Frage irrelevant. Ich möchte also auf Punkt 3 reagieren: Können Sie bitte einige Beispiele für Multithread-GUI-Toolkits nennen? Vielen Dank.
Barjak

2
@barjak: Multithread-GUI ist ein Fehler. Das einzige, das ich kenne, ist das alte Java AWT. Aber sie haben aus den Fehlern gelernt, als sie Swing entworfen haben, das wie alle modernen GUI-Frameworks Single-Threaded ist.
Jonas

@Jonas Einen Entwickler dazu zu bringen, über Multithreading nachzudenken, ist oft ein Fehler, aber Sie können keine Animationen ausführen, RMI-Aufrufe tätigen oder intensive Berechnungen durchführen (dies ist ein Fat Client-Toolkit, denken Sie daran), ohne ein gewisses Maß an Multithreading.
Steve Jackson

3
@Steve: Das stimmt. Sie sollten jedoch keine RMI-Aufrufe und intensiven Berechnungen im GUI-Thread durchführen. Solche Dinge sollten in einem Hintergrund-Thread erledigt werden, wie in Swing und WPF.
Jonas

@barjak - Windows-Formulare, MFC, SWT, pyQT, Juce ... Es fällt mir schwerer, an solche zu denken, die nicht über mehrere Threads verfügen. Im Allgemeinen gelten jedoch dieselben Regeln. Sie können Ihre GUI-Komponenten nur von dem Thread aus berühren, der sie erstellt hat.
Steve Jackson

2

Jonas,

Swing verallgemeinert Ihre zugrunde liegende Architektur, um Ihnen eine plattformneutrale Benutzererfahrung zu bieten. Die einzige Schwergewichtskomponente (vom Betriebssystem bereitgestellt) ist der JFrame-Container, und der Rest wird so ziemlich vom Swing-Takedit übernommen. AWT hingegen fordert das Betriebssystem auf, alle UI-Komponenten zu zeichnen, was bedeutet, dass es in vielerlei Hinsicht schneller ist, als wenn Sie die systemeigenen UI-Komponenten verwenden. SWT versucht, einen Mittelweg zu finden. Für verschiedene Standardkomponenten wie Schaltflächen und Beschriftungen (die auf den meisten Betriebssystemen verfügbar sind) kann das Betriebssystem mit diesen umgehen, und für andere spezialisierte Komponenten übernimmt SWT die Erstellung für Sie.

Trotzdem kann ich die Nachteile skizzieren.

(1) Da das Toolkit die Komponenten für Sie erstellt und rendert, anstatt das Betriebssystem zu fragen, können Sie die Geschwindigkeit der vom Betriebssystem bereitgestellten integrierten Komponenten nicht nutzen.

(2) Die Benutzeroberfläche ist nicht besonders aufdringlich, da sie den meisten Betriebssystemplattformen in Bezug auf das von Ihnen verwendete Erscheinungsbild fremd erscheint.

(3) Einige der Layout-Manager, z. B. GridBadLayout usw., könnten besser vereinfacht werden. Ich habe die Anzahl der Projekte verloren, an denen ich gearbeitet habe, bei denen Leute das GridBagLayout in einen maßgeschneiderten Code verpackt haben, um eine einfachere Verwendung zu erhalten.

Ich würde Ihnen raten, eine einfache App in AWT, Swing und SWT zu schreiben und die Entwicklungsansätze und das Endprodukt zwischen allen zu vergleichen. Überprüfen Sie dann die verschiedenen Kommentare anderer Entwickler und entscheiden Sie, welche am besten funktioniert. Ich habe viele Jahre mit Swing gearbeitet und SWT nicht gemocht, aber mir wurde klar, dass Swing im Vergleich zu anderen Frameworks viel komplizierter ist, als es sein muss.


4
Swing ist GPU-beschleunigt , was native Frameworks nicht oft sind, daher denke ich, dass Swing schneller ist. Dies ist auch die Strategie von WPF unter Windows, jedoch nicht von WinForms (nur bei einigen Windows-Versionen). Wie kann "[hässlich] ... in Bezug auf das von Ihnen verwendete Erscheinungsbild" wahr sein, wenn es sehr anpassbar ist oder Sie das plattformeigene LaF verwenden können? Ich stimme zu, dass die Layout-Manager wirklich schlecht sind.
Jonas

Jonas, es ist der "anpassbare" Aspekt des Swings, der es im Vergleich zu anderen Frameworks schwierig macht. Wenn Sie versuchen, von den Funktionen des Betriebssystems abzuweichen, verlieren Sie viele der Vorteile, die es bietet. Die allererste Version von Swing war ein Albtraum, der in erster Linie zur Schaffung von SWT führte. Später wurde Swing verbessert, um viel schneller zu sein, und Sie haben Klassen wie SwingUtilities, die eine bessere Threading-Unterstützung für GUIs bieten.
Desolate Planet

Hässlich könnte das falsche Wort sein; Alien ist vielleicht ein besseres Wort, da Look & Feel nicht genau das gleiche ist wie das native UI-Look & Feel. Soweit ich mich erinnere, haben Sie Java, Motiv, Metal und einige andere, aber im Allgemeinen sind sie es nicht. t all das hübsch.
Desolate Planet

Das nächste, was Sie bei einem Vergleich beachten sollten, ist der Aufwand für die Entwicklung einer Benutzeroberfläche. Ich würde nicht sagen, dass die Layout-Manager wirklich schlecht sind, es gibt besser als gar kein Layout (mit dem ich mich bei der Arbeit auf einem mobilen Gerät befassen muss), aber sie bemühen sich nicht, das Modell zu vereinfachen.
Desolate Planet

Ich denke, basierend auf dem, was Sie gesagt haben, haben Sie die neuere Version von Swing verwendet, aber als sie herauskam, haben die Leute eine starke Abneigung dagegen gezeigt, und dies umso mehr, als sie versuchten, Swing-basierte Applets bereitzustellen. Die in Java entwickelten UI-Frameworks haben viel Geschichte und es ist eine interessante Lektüre, wenn Sie sich damit befassen.
Desolate Planet

-2

Swing ist langsam (schlechte Leistung), schwer / ungeschickt zu bedienen (im Vergleich zu vielen anderen) und sieht auf einigen Plattformen nicht sehr gut, ja sogar sehr schlecht aus.


5
Ich finde es schnell (es hat eine GPU-Beschleunigung im Vergleich zu vielen nativen GUIs), daher kann ich der Leistung nicht zustimmen oder haben Sie Beispiele? Wie ist es schwer und ungeschickt im Vergleich zu anderen Frameworks? Ich bin damit einverstanden, dass es nicht gut aussieht, aber es kann so konfiguriert werden, dass es wie native Apps aussieht oder ein benutzerdefiniertes LaF verwendet.
Jonas

Es sieht auf GTK mehr oder weniger immer nicht nativ aus. Was ich gehört habe ist, dass es langsam ist, weil es auf Java 2D basiert, um Widgets zu zeichnen, aber ich habe nichts, womit ich das beweisen könnte. Sowohl Qt als auch GTK fühlen sich für mich weniger ungeschickt an, aber der Geschmack ist unterschiedlich.
Anto

Ah, es kann auf einigen Plattformen schlechter abschneiden. Ich habe es nur unter Windows verwendet, wo es GPU-beschleunigt und sehr schnell ist.
Jonas

6
Die Leute beschweren sich immer noch, dass etwas nicht nativ aussieht, während sie immer mehr Browser-Dinge verwenden (denken Sie: Stackexchange), bei denen jede Seite anders aussieht? Und Geschwindigkeit? Meistens wartet ein interaktives GUI-Programm auf den Benutzer.
Benutzer unbekannt

2
Die meisten "trendigen" Programme sehen nicht mehr nativ aus. Swing endet in dieser Hinsicht nicht besser oder schlechter. Die Leistung unserer 50kloc Swing App (Fat Client) scheint in Ordnung zu sein. Es ist viel einfacher, einen Punkt zu erreichen, an dem es nicht zum Absturz kommt, als "native" Anwendungen.
Tim Williscroft
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.