Jakie wady ma środowisko Java Swing GUI? [Zamknięte]

11

Użyłem Java Swing do niektórych aplikacji komputerowych. Ale nie używałem tak często innych frameworków GUI, więc nie mogę ich porównać.

Jest pewne rzeczy, które lubię w Swing, a niektóre nie lubię, ale taka jest sytuacja z prawie wszystkim.

Jakie są największe wady struktury Java Swing GUI?

Jonas
źródło
2
Pytanie jest interesujące. Ja też zastanawiam się, jakie są mocne i słabe strony Swinga w porównaniu do QT, GTK, SWT, Winforms, Cocoa i tym podobnych. Może powinieneś przeformułować tytuł, aby poprosić o porównanie , a nie wady (które zwykle nie przynoszą dobrze uzasadnionych odpowiedzi)
barjak

Odpowiedzi:

3
  1. Musisz mieć gdzieś zainstalowaną Javę. Dotyczy to oczywiście wszystkich frameworków GUI, ale java postrzega goryla o wadze 2 ton. Robiło się lepiej, ale te wczesne dni apletów Java wyłączyły wiele osób. Jeśli potrzebujesz go tylko do uruchomienia jednej aplikacji, utrzymanie jej na bieżąco dzięki łatkom bezpieczeństwa i tym podobnym wymaga wielu czynności konserwacyjnych. Każdy musi mieć Flash dla youtube, .NET Framework instaluje się za kulisami i wszyscy mają włączoną obsługę javascript w swojej przeglądarce. Java jest zwykle dodatkową rzeczą do zrobienia.

  2. Mimo, że jest to coś do jednokrotnego zapisu, uruchamiania w dowolnym miejscu, wciąż okazuje się, że Mac OSX nie ma tej nowej wymyślonej rzeczy, której chcesz użyć, lub jeden klient odmawia uaktualnienia systemu Linux mandrake w stosunku do JRE 1.4.

  3. Jako twórca musisz pomyśleć o wątkach. I jest to trudne, ponieważ wielowątkowość jest możliwa, ale huśtawka udaje, że wszystko jest jednowątkowe. Ale wtedy połowa bibliotek, które pobierasz, ma pewien stopień wielowątkowości i zakłada, że ​​wiesz o wywołaniu EDT Później i wymusza to wiele lekcji na ciężko.

  4. Swing Experience nie przenosi się łatwo na inne rodzaje rozwoju interfejsu użytkownika. Na przykład, jeśli jesteś świstem przy stołach w .css, zostaniesz całkowicie zaskoczony przez Jtables, renderers, edytorów itp.

Ogólnie rzecz biorąc, głównym problemem związanym ze Swingiem jest to, że nie spełniał wymagań rynku. Jest to całkowicie odpowiednia technologia dla wielu przypadków użycia, ale te pierwsze 5 lub 6 lat były pełne okropnych wdrożeń i okropnych apletów. A teraz jest to stara technologia do Web 3.0 lub cokolwiek innego.

To powiedziawszy, lubię Swinga i myślę, że profesjonaliści przeważają nad wadami, kiedy potrzebujesz tego, co oferuje. Jednak wrażenia internetowe są tak wszechobecne, że wielu użytkowników będzie miało łatwiejszy czas z aplikacją internetową niż najbardziej usprawniona niesamowita aplikacja swing. Istnieją niesamowite aplikacje Swing, ale nie wydają się być głównym nurtem.

Steve Jackson
źródło
1
Jestem w tej samej sytuacji, co OP: znam Swinga i jestem zainteresowana porównywaniem go z innymi grafikami GUI. Dla mnie pkt 1, 2 i 4 nie mają znaczenia dla pytania. Chciałbym zatem zareagować na punkt 3: czy mógłbyś podać kilka przykładów wielowątkowych zestawów narzędzi GUI? Dzięki.
barjak
2
@barjak: Wielowątkowy GUI to błąd. Jedyne, co znam, to stara Java AWT. Ale nauczyli się na błędach, projektując Swing, który jest jednowątkowy jak wszystkie współczesne frameworki GUI.
Jonas
@Jonas Myślenie programisty o wielowątkowości jest często błędem, ale nie można uruchamiać animacji, wykonywać połączeń RMI ani wykonywać intensywnych obliczeń (jest to zestaw narzędzi dla grubego klienta, pamiętaj) bez pewnego stopnia wielowątkowości.
Steve Jackson
3
@ Steve: To prawda. Ale powinien nie robić połączeń RMI i intensywne obliczenia w GUI-wątku. Tego rodzaju rzeczy powinny być wykonywane w wątku tła, tak jak w Swing i WPF.
Jonas
@barjak - formularze Windows, MFC, SWT, pyQT, Juce .... Trudniej mi myśleć o tych, które nie są wielowątkowe. Zasadniczo obowiązują jednak te same zasady, nie można dotknąć komponentów GUI poza wątkiem, który je utworzył.
Steve Jackson
2

Jonas,

Swing uogólnia architekturę bazową, aby zapewnić użytkownikom neutralne dla platformy wrażenia. Jedynym ciężkim komponentem (dostarczanym przez system operacyjny) jest kontener JFrame, a resztą zajmuje się Swit takeit. Z drugiej strony AWT prosi system operacyjny o narysowanie wszystkich składników interfejsu użytkownika, co oznacza, że ​​jest szybszy na wiele sposobów, niż przy użyciu natywnych składników interfejsu użytkownika specyficznych dla systemu operacyjnego. SWT stara się osiągnąć środek, dla różnych standardowych komponentów, takich jak przyciski i etykiety (które są dostępne w większości systemów operacyjnych), pozwala systemowi operacyjnemu sobie z nimi poradzić, a dla innych specjalistycznych komponentów SWT zajmie się tworzeniem dla ciebie.

To powiedziawszy, mogę nakreślić wady.

(1) Ponieważ zestaw narzędzi tworzy i renderuje komponenty dla ciebie, zamiast pytać system operacyjny, nie możesz skorzystać z szybkości wbudowanych komponentów zapewnianych przez system operacyjny.

(2) Interfejs użytkownika nie jest szczególnie atrakcyjny, ponieważ wydaje się być obcy dla większości platform OS pod względem wyglądu i sposobu użytkowania.

(3) Niektóre z menedżerów układu, np. GridBadLayout itp., Mogłyby być lepiej uproszczone. Straciłem rachubę liczby projektów, nad którymi pracowałem, w których ludzie otoczyli GridBagLayout jakimś niestandardowym kodem, aby uzyskać prostszy sposób korzystania z niego.

Radzę napisać prostą aplikację w AWT, Swing i SWT i porównać podejścia programistyczne do końcowego produktu między nimi wszystkimi, a następnie przejrzeć różne komentarze innych programistów i zdecydować, który z nich będzie najlepszy. Pracuję z Swingiem od wielu lat i nie lubiłem SWT, ale zdałem sobie sprawę, że Swing jest o wiele bardziej skomplikowany, niż powinien być w porównaniu z innymi platformami.

Desolate Planet
źródło
4
Swing jest akcelerowany przez GPU , a natywne frameworki nie są często, więc myślę, że Swing jest szybszy. Jest to także strategia WPF w systemie Windows, ale nie WinForm (tylko w niektórych wersjach systemu Windows). W jaki sposób „[brzydki] ... sposób, w jaki wyglądasz i czujesz, którego używasz” może być prawdziwy, gdy można go bardzo dostosować lub możesz korzystać z własnych platform LaF? Zgadzam się, że menedżerowie układu są naprawdę źli.
Jonas
Jonas, jest to „konfigurowalny” aspekt swingu, który sprawia, że ​​jest trudny w porównaniu do innych frameworków. Jeśli spróbujesz oderwać się od funkcji zapewnianych przez system operacyjny, tracisz wiele z oferowanych przez niego korzyści. Pierwsza wersja Swinga była koszmarem, który doprowadził do powstania SWT. Później Swing został ulepszony, aby był o wiele szybszy i masz takie klasy jak SwingUtilities, które oferują lepszą obsługę wątków dla GUI.
Desolate Planet
Brzydkie może być niewłaściwe słowo; kosmita może być lepszym słowem, ponieważ wygląd nie jest dokładnie taki sam jak natywny wygląd interfejsu użytkownika, z tego co pamiętam, masz Java, motyw, metal i kilka innych, ale ogólnie rzecz biorąc, nie są wszystko takie ładne.
Desolate Planet
Następną rzeczą, na którą należy zwrócić uwagę podczas porównywania, jest wysiłek włożony w opracowanie interfejsu użytkownika. Nie powiedziałbym, że menedżerowie układów są naprawdę źli, jest lepszy niż żaden układ (z czym muszę sobie radzić w pracy na urządzeniu mobilnym), ale nie starają się uprościć modelu.
Desolate Planet
Myślę, że w oparciu o to, co powiedziałeś, używasz najnowszej wersji Swinga, ale kiedy to się pojawiło, ludzie bardzo go nie lubili, a tym bardziej, gdy próbowali dostarczyć aplety oparte na Swing. Struktury interfejsu użytkownika opracowane w Javie mają wiele historii, a jeśli się w to zagłębić, warto przeczytać.
Desolate Planet
-2

Swing jest wolny (słaba wydajność), trudny / niezdarny w użyciu (w porównaniu do wielu innych) i na niektórych platformach nie wygląda bardzo dobrze, aw rzeczywistości bardzo źle.

Anto
źródło
5
Uważam, że jest szybki (ma przyspieszenie GPU, w porównaniu z wieloma natywnymi GUI), więc nie mogę się zgodzić z wydajnością czy masz jakieś przykłady? Jak to jest trudne i niezdarne w porównaniu do innych ram? Zgadzam się, że nie wygląda dobrze, ale można go skonfigurować tak, aby wyglądał jak aplikacje natywne lub używać niestandardowego pliku LaF.
Jonas
Wygląda mniej więcej zawsze nienatywnie na GTK. Słyszałem, że ponieważ rysowanie widżetów opiera się na Javie 2D, jest powolne, ale nie mam na to dowodów. Zarówno Qt, jak i GTK są dla mnie mniej niezdarne, ale ich gusta są różne.
Anto,
Ach, może działać gorzej na niektórych platformach. Użyłem go tylko w systemie Windows, w którym jest on przyspieszany przez GPU i bardzo szybki.
Jonas
6
Ludzie wciąż narzekają, że coś nie wygląda na natywne, a przy użyciu coraz większej liczby elementów przeglądarki (pomyśl: stackexchange), gdzie każda strona wygląda inaczej? A prędkość? Przez większość czasu na użytkownika czeka interaktywny program GUI.
użytkownik nieznany
2
Większość „modnych” programów nie wygląda już natywnie. Swing nie kończy się ani lepiej, ani gorzej pod tym względem. Wydajność naszej aplikacji 50kloc swing (gruby klient) wydaje się być w porządku. Znacznie łatwiej jest przejść do punktu, w którym nie ulega awarii, niż aplikacje „rodzime”.
Tim Williscroft