Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Java-GUI

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.09.2003
    Beiträge
    28

    Question Java-GUI

    Hallo,

    ich möchte demnächst damit anfangen, Java zu lernen.

    Vermutlich zunächst erstmal ohne GUI, aber irgendwann soll das dann natürlich auch kommen, daher meine Frage.

    Ich habe bis jetzt von drei Java-GUIs/Toolkits (was ist der richtige Begriff?) gehört:
    • AWT
    • Swing
    • SWT

    Was unterscheidet diese drei, wie sind die historisch entstanden (z.B. welches ist das Älteste) und welche Vor- und Nachteile sind mit denen verbunden? Bzw. gibt es ein "noch viel besseres" (wohlgemerkt in Anführungszeichen, meist muss man ja auch Anwendungsfälle berücksichtigen...)?

    Ich habe schon mal gesucht, aber leider noch keine kurze, "knackige" Gegenüberstellung gefunden...

    Über einige Hinweise würde ich mich freuen, vielen Dank im Voraus!

    MfG
    bockionline

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Toolkit ist schon richtig.

    AWT:
    Das Original Java-Toolkit von Sun. Ursprünglich innerhalb von etwa 4 Wochen entstanden - mit entsprechend schlechtem Design. Später gründlich überarbeitet. Basiert (bisher, bei 1.5 soll sich das ändern) jeweils auf einem Toolkit der verwendeten Plattform (Linux/Solaris: Motif, Windows: Win32-Api, etc). Kaum praktisch verwendet da die Widgetauswahl sehr beschränkt ist. (z.B. kein Tree Widget, kein formatierter Text, etc)

    Swing:
    Lightweight Toolkit (dessen Klassen von AWT abgeleitet sind) mit mehr Funktionen - in Java ab Version 1.2. Vorteile sind u. a. änderbares Look and Feel, abstrakte High-Level sachen (Treemodel, etc) und sehr viele Widgets. Nachteilig ist, dass Swing imo hässlich aussieht (bei 1.5 wirds besser), sich jeweils trotz angepasstem LNF von den jeweils nativen Programmen unterschiedet und: Swing ist recht langsam. (Wird aber von Version zu Version schneller, mittlerweile imo benutzbar geworden)

    SWT:
    Nicht von Sun aber von IBM, muss zusätzlich installiert werden. Es werden jeweils native Widgets verwendet (GTK2/Motif/Fox unter Linux, natives Toolkit unter Windows/Mac OS X und QNX) - dadurch ist SWT schneller als Swing und sieht genau gleich aus wie ein "normales" Programm. Die Gtk2-Implementierung ist trotzdem recht langsam - die FOX-Version (mit der Eclipse aber noch ab und zu abstürzt) ist wesentlich schneller. SWT ist noch nicht "fertig" - es werden immer noch Sachen hinzugefügt (HTML-Widget, MDI im aktuellen Release).
    Hauptnachteil ist, dass die Garbage-Collection nicht mit SWT verwendet werden kann - das jeweils oberste GUI-Element muss manuell mit dispose() freigegeben werden - an sich kein Problem, schwieriger wirds erst, wenn man Objekte ohne "Parent" erstellt, was man aber eigentlich nie muss. Nicht zu vergessen ist auch der höhere Testaufwand im Vergleich zu Swing (das geht meistens einfach so Plattformunabhängig) - bei SWT muss da manchmal je nach verwendetem "Backend" - Toolkit noch etwas nachgebessert werden, da sich die Versionen manchmal ein bisschen unterscheiden.
    Swt-Programme kann man auch (mit derzeit bescheidenen Vorteilen an Tempo) mit GCJ native kompilieren. (Auch unter Windows)

    Mehr zu SWT gibts in meiner Maturarbeit u.a. auch mit (allerdings nicht sehr detailiertem, da es hauptsächlich ums praktische Verwenden von SWT geht) Vergleich zu AWT/Swing.

    Zusätzlich zu Swing/AWT/SWT kenne ich noch folgende Möglichkeiten:

    http://java-gnome.sourceforge.net/ - die Java-Sprachbindings der Gnome-Libs.
    Habe ich mal vor langerZeit (als noch das gute alte Gtk1 aktuell war) ausprobiert - gingen damals gut, allerdings gefiel mir der Gtk+-Programmierstil nicht so.

    http://developer.kde.org/language-bi...va/qtjava.html - Sprachbindings für KDE/Qt
    Habe ich nie getestet. Imo sollte man - wenn schon Qt - dann gleich C++ verwenden (darum lern ich das jetzt auch). Qt ist ja nicht nur ein Toolkit sondern eher eine Alternative zur gesamten Java-Klassenbibliothek.

    Zu meinen beiden Lieblinks-Klein&schnell-Toolkits FLTK und Fox gibts afaik keine Java-Bindings (mal abgesehen von der auf Fox basierenden Swt-Implementierung)

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.09.2003
    Beiträge
    28
    Vielen Dank für die sehr ausführlichen Erklärungen!

    Das hat mir wirklich sehr weitergeholfen, jetzt habe ich vernünftige Ansatzpunkte für weitere Recherchen!

    Dankeschön,
    bockionline

  4. #4
    Registrierter Benutzer
    Registriert seit
    10.06.2003
    Beiträge
    15
    Diese Forum ist einfach der Hit: Ich wollte gerade die gleiche Frage wie bockionline stellen. Danke an peschmae für die leicht verständliche Antwort.

    Eine kleine Frage würde ich dann gerne noch anschliessen: Soweit ich es mir bisher korrekt angelesen haben, benutzt SWT einen Layer namens JNI (?) um für den nativen LNF auf GTK+ zugreifen zu können. JNI ist generell zur Einbindung von C Code gedacht, nehme ich an?

    Nun gibt es aber vom java-gnome Project auch GTK+ Bindings über JNI. Vorteil gegenüber SWT scheint zu sein, daß die Garbage Collection bei den Jave-Gnome Project funktioniert - zumindest führen sie dessen Möglichkeit als expliziten Vorteil von Java an, daher unterstelle ich das jetzt einfach mal.

    Kann mir jemand sagen, ob es weitere Unterschiede gibt?

    Vielen Dank für jede Hilfestellung.

  5. #5
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Ja...

    Ja, Java-GNOME unterstützt z.B. mehr Widgets als SWT, da Java-GNOME ja nicht viele verschiedene Toolkits als basis nutzt, sondern nur GTK+, womit dessen Fähigkeiten besser genutzt werden können.

    Ein weiteres Problem bei der GTK-Version von SWT ist die miese Performance, hier konnte ich zwischen java-gtk und gtk/C subjectiv gar keine Untrschiede feststellen.

    Einen enormen Nachteil solltet ihr aber bei der verwendung nativer Toolkits unter Java nie vergessen:
    Wenn ihr eine Anwendung mit SWING schreibt, braucht ihr einfach nur zu sagen, dass java-1.X+ installiert sein muss und es wird auf jeder Platform (hoffentlich) anstandslos laufen. Wenn die bemühungen von SUN fruchten mit 1.5 unter Linux bald genauso schnell wie derzeit schon unter Windows.
    Schreibt ihr eine Anwendung in java-gtk/swt müsst ihr darauf verweisen, dass gtk (= gtk (version mindestens 2.0.6), gdk, glib, pango, atk) installiert sein müssen. Außerdem müsst ihr zu eurer Anwendung einen kompilierten C-Programmteil mitliefern, der für den Zugriff auf die C-Funktionen zuständig ist.
    Dabei kommt es hin und wieder zu konfliktenn zwischen verschiedenen C-Compiliern, Bibliotheiken, etc so dass eure Anwender im Schlimmsten fall die Bindings selbst kompilieren müssen, wofür diese natürlich die dev-pakete von gtk auch noch brauchen.

    Meine Empfelung:
    Wenn ihr kein Problem darin seht, dass eure Programme nur auf nicht-freien Java versionen laufen und ihr leistungsfähige Rechner zur verfügung habt (1Ghz+) nehmt swing.
    Wenn euch SWING zu langsam ist und ihr java-1.1 kompatibilität für applets etc. braucht und trotzdem höchste Performance haben wollt, nhemt LWVCL von www.zaval.org. Solange man damit GPL-Programme entwickelt kostet es nix, sonst 500$,was im gegensatz zu QT wirklich fair ist. Die Performance ist in etwa so schnell wie QT.
    Der Nachtei an lwvcl ist, dass es dafür keine GUI-Designer gibt und dass ein HTML-Renderer fehlt, aber sonst ist diese Bibliothek mit nur 160kB fats so mächtig wie SWING nur viel schneller.
    Geändert von Lin728 (19-08-2017 um 22:06 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    09.08.2003
    Beiträge
    12

    Re: Ja...

    Original geschrieben von ceisserer
    Grüssi!

    Meine Empfelung:
    Wenn ihr kein Problem darin seht, dass eure Programme nur auf nicht-freien Java versionen laufen und ihr leistungsfähige Rechner zur verfügung habt (1Ghz+) nehmt swing.
    Wenn euch SWING zu langsam ist und ihr java-1.1 kompatibilität für applets etc. braucht und trotzdem höchste Performance haben wollt, nhemt LWVCL von www.zaval.org. Solange man damit GPL-Programme entwickelt kostet es nix, sonst 500$,was im gegensatz zu QT wirklich fair ist. Die Performance ist in etwa so schnell wie QT.
    Der Nachtei an lwvcl ist, dass es dafür keine GUI-Designer gibt und dass ein HTML-Renderer fehlt, aber sonst ist diese Bibliothek mit nur 160kB fats so mächtig wie SWING nur viel schneller.

    lg Clemens
    Danke für den Link!

    mfg
    -lacsap

  7. #7
    Registrierter Benutzer
    Registriert seit
    10.06.2003
    Beiträge
    15

    Re: Ja...

    Original geschrieben von ceisserer
    Ein weiteres Problem bei der GTK-Version von SWT ist die miese Performance, hier konnte ich zwischen java-gtk und gtk/C subjectiv gar keine Untrschiede feststellen.
    Mit anderen Worten: Java-GTK ist deutlich schneller als SWT? Das genügt mir als Info. Ich lege keinen Wert auf die Plattformunabhängigkeit.

    Vielen Dank für Deine Antwort.

  8. #8
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Ja...

    Ja, Java-GTK ist um einiges schneller als SWT-GTK (welches massive Performance-Probleme hat und nicht mal die Authoren wissen warum) und hat außerdem mehr Widgets.
    Thats it.
    Geändert von Lin728 (19-08-2017 um 22:06 Uhr)

  9. #9
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549

    aber

    Es gibt natürlich auch noch SWTFox. Das rockt. Zumindest bei meinem letzen Programm hatte ich keine Probleme das zu benutzen (Eclipse ist damit noch recht instabil)

    Das Tempo bei JavaGtk/Gnome ist wirklich gut. Kann ich bestätigen. Allerdings hatte ich überhaupt keine Tempoprobleme als ich Eclipse kürzlich mal auf einem einigermassen aktuellen PC (so im Bereich 1 Ghz oder so) ausprobiert habe. Auf meinem PII macht sich der Unterschied aber schon bemerkbar.

    @ceisserer - Ebenfalls danke für den Link. Das kannte ich noch gar nicht

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  10. #10
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Ich auch nicht ;-)

    @peschmae: Ich ja auch nicht :-)

    Aber da ich meine Maturaarbeit JDK-1.1 kompatibel machen muss und ich AWT einfach zum verzweifeln fand, bin ich auf lwvcl gestoßen. Das kann zwar weniger als Swing, ist aber viel schneller und sehr flexibel und hat nur 170kB.
    Naja, schade ist, dass man bei kommerzieller Nutzung zahlen muss, aber 500$ sind ja nicht sooo viel im vergleich zu QT. Und bei opensource-software hat man ein Toolkit, dass auch auf Kaffe läuft .
    Geändert von Lin728 (19-08-2017 um 22:07 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •