Jakiego GUI warto się uczyć?

0

Dzień dobry,
Jakiego GUI warto się dziś uczyć? Nie chodzi o swing, podobno javafx też jest raczej u schyłku. Chodzi o przyszłościową technologię, która najlepiej dawała spore możliwości w aplikacjach standalone, również web i android. O ile coś takiego jest.

2
  1. Prawie nikt nie roi aplikacji desktopowych w Javie
  2. Prawie nikt już nie generuje htmla w Javie -> teraz jest react
  3. Android ma jakieś swoje GUI
0
KamilAdam napisał(a):

Prawie nikt nie roi aplikacji desktopowych w Javie

Nawet, jeżeli 90% biznesu to w ogóle aplikacje inne niż desktopowe, to co proponujesz w kategorii aplikacji desktopowej lub konsolowej? Wydaje się, że najlepszym wyborem jest C# za sprawą .NET Core lub właśnie Java. Tworzę raz, kompiluję raz i bez większych problemów mogę uruchomić na każdym komputerze niezależnie od procka i OS. Jeszcze mam doświadczenie w C++/Qt, ale co system czy komputer, to trzeba osobno kompilować.

Nawet, jeżeli Swing to przeżytek, to co "pogrzebało" Javę w roli desktopa? Przez moje ręce przechodzą różne aplikacje desktopowe i takie z linii poleceń w konsoli, ale niezmiernie rzadko trafia się coś w Java.

5

to co "pogrzebało" Javę w roli desktopa?

To nawet nie tak, ze Java jest pogrzebana w desktopie. Po prostu aplikacje desktopowe to juz "przezytek". Jak nie jestes photoshopem to wolisz miec SaaS w webie albo electronie. A jak jestes Photoshopem to dzieki WASM w przyszlosci tez mozesz chciec miec SaaS w webie...
Nawet pakiety biurowe juz masz w przegladarce.

0

@Haxe:

Haxe napisał(a):

JetBrains przepisuje swoje środowiska programistyczne ze starej Javy i Swing na Kotlina i Rust chyba z GTK4. Przykład Fleet. Ostatnio zainstalowałem NetBeans 18 i przy uruchamianiu projektu Spring wpadł w jakąś pętle przy pobieraniu plików z Mavenem, gdzie procesor pracował na 100%. Ten bug od kilkunastu lat jest nienaprawiony, co pokazuje jak słabym językiem jest tworzenie GUI w Javie. Obecnie dobre edytory są tworzone w TS, Kotlin, Rust i Zig(Pulsar)

eee, raczej nie. ze strony https://www.jetbrains.com/fleet/ :

Built from scratch, based on 20 years of experience developing IDEs. JetBrains Fleet uses the IntelliJ code-processing engine, with a distributed IDE architecture and a reimagined UI.

a więc cała analiza kodu, podpowiadanie, refaktoring, etc jest dalej oparte o intellij platform, czyli jest w javie

How is Fleet being built?
Fleet is mainly written in Kotlin, which means it runs on the JVM. The UI framework is a home-grown solution using Skia (via Skiko). For those of you wondering why we didn’t use Compose Multiplatform: we started working on Fleet when Compose Multiplatform wasn’t available yet.

gui napisane w kotlinie i chodzi pod javką

Furthermore, Fleet uses Rust for the Fleet System Agent, which is a process that runs on the target machine. It is used to build the project, run code, execute terminal commands, and perform other actions in the target environment on behalf of Fleet.

rust jest używany tylko do małego kawałka, agenta wykonującego proste polecenia i nasłuchującego na zmiany w systemie plików (czy jakoś tak, nie chciało mi się dociekać)

https://blog.jetbrains.com/fleet/2022/01/fleet-below-deck-part-i-architecture-overview/

However, as a true polyglot IDE, Fleet itself is also polyglot. That’s right, a small part of Fleet, in particular the Fleet System Daemon, is built in Rust!

0

Nie wiem czy jest to kwestia tego, że świat odszedł od aplikacji desktopowych. Być może. Ale zawsze java na tym polu przegrywała. Przecież robienie w swingu to jakaś mordęga. Było SWT, ale komplikowało to obiektowy charakter projektów javovych i takiej apki już nie dało się odpalać w innych systemach.

0

Ale zawsze java na tym polu przegrywała.

przegrywałą bo nigdy to nie miał być target. Najpierw Java miała być prostym językiem do programowania mikrokontrolerów (nie wypaliło). Potem Java miała być językiem do pisania apletów (wygryzł ją flash a potem JavaScript i html5). Ale w między czasie Java stała się językiem do pisania aplikacji webowych i to poszło dobrze.

Do pisania aplikacji desktopowych Windows miał C\C++ a potem C#. Linux - C++ i C. A Mac - Objectiv-C a teraz Swifta

Java się w tym czymś pałętała, ale ani nie miałą uznania windowsiarzy, ani linuksiarzy

0

Dla go polecam https://wails.io/ lub kilka innych
Rust: https://tauri.app/
Ewentualnie qt na pewno ma jakies binding do javy
Chyba ze aplikacja ma jakies specyficzne wymogi gdzie natywny jezyk na dana platforma to must have

1

Nie wiem nic na temat pisania aplikacji GUI w Javie, ale tak historycznie aplikacje pisane w Javie zawsze uchodziły za najgorszy sort aplikacji, delikatnie mówiąc. Już od pierwszego włączenia aplikacji od razu był czuć swąd javy. Dziwne GUI, które nie wyglądało ani współcześnie, ani nie pasowało do systemu. Dziwne i niewygodne dialogi, zwłaszcza te z wyborem plików. Aplikacje włączały się dłużej, były mniej responsywne i chodziły ociężale. Brak obsługi horyzontalnego scrolla, zdrewniała obsługa touchpadowego scrolla. Brak podstawowych skrótów klawiszych, które wszędzie indziej działały. Generalnie aplikacje desktopowe w javie uchodziły za największy syf i nikt nie chciał tego używać z własnej woli. Do GUI Java aktualnie chyba jest używana tylko do produkowania narzędzi związanych z Javą, czyli IDE, profilery i inne takie.

2
sceptyk napisał(a):

Nie wiem czy jest to kwestia tego, że świat odszedł od aplikacji desktopowych. Być może. Ale zawsze java na tym polu przegrywała. Przecież robienie w swingu to jakaś mordęga.

Strasznie mnie to dziwi, bo latach 90tych napierdalałem GUIce w Delphi, (potem C++ Builder), leciutko QT (pierwsze moje linuxy), Visual Studio 6.0 (to był jakiś totalny dramat) i dopiero w Swingu to było IMO dobrze rozwiązane.
To znaczy Delphi/Builder był bardziej bajerancki, ale tylko w Swingu dawało się ZESPOŁOWO napierdalać GUI i to jeszcze tak, że działało dobrze na różnych rozdzielczościach.

Co nie znaczy, że Swing nie miał wad - jak się nie przerobiło grubej nudnej książki - to w Swingu wychodziło obrzydliwe, nieresponywne GUI (jedyna zaleta, że działało). Obecnie uznaje takie frameworki (wymagające dużo czytania) za słabe (chociaż "działa, ale ewentualnie mało wydajnie" to nie jest aż taki zły efekt).

1

Aplikacje desktopowe w javie nie mają żadnego sensu - wolne, brzydkie, nie ma chyba bezpośredniego sposobu interakcji z systemem, praktycznie nie mogą robić nic więcej niż aplikacje webowe udające desktopowe, prawie nikt poza programistami javy i graczami minecrafta nie ma zainstalowanego JRE na komputerze, więc musi dociągnąć 60MB syfu który będzie się regularnie później pytał o aktualizacje tylko po to żeby móc korzystać z jednej aplikacji.
ok ponoć już jre nie ma osobnego instalatora i nie pyta o aktualizacje. Tak czy inaczej jre musisz dodać do swojej aplikacji.

To już znacznie lepiej użyć jakiegoś javascriptowego frameworka - runtime javascript waży mniej więcej tyle samo, a będzie ładniej i łatwiej, aplikacje będą działać prawdopodobnie tak samo wolno lub może nawet trochę szybciej. Dodatkowo plusem jest że spełnia resztę twoich wymagań - przyszłościowe, możliwość odpalenia tego samego kodu w web i android.
Po prostu uznaj że java już nie żyje jeśli chodzi o GUI.
Java miała jakiś sens przed erą electrona / react native żeby stworzyć aplikację na kilka systemów na raz, z tym że na żadnym z tych systemów aplikacja nie wyglądała natywnie.

1
obscurity napisał(a):

prawie nikt poza programistami javy nie ma zainstalowanego JRE na komputerze, więc musi dociągnąć 60MB syfu który będzie się regularnie później pytał o aktualizacje tylko po to żeby móc korzystać z jednej aplikacji.

takie coś ostatnio było w javie 8 (która wyszła w 2014 roku). późniejsze wersje javy nie mają instalatora z aktualizatorem (w sensie takiego systemowego). zamiast tego stosuje się rozwiązania analogiczne do javascriptowych frameworków (typu electron), czyli środowisko wykonawcze jest zintegrowane, instalowane i aktualizowane razem z apką. jedyną popularną platformą programistyczną, która instaluje się w systemie i woła o aktualizacje jest .net, który czasem jest i w kilku wersjach zainstalowany w systemie (i nie wiadomo, który można już usunąć).

a odpowiadając na pytanie autora wątku:

sceptyk napisał(a):

Dzień dobry,
Jakiego GUI warto się dziś uczyć? Nie chodzi o swing, podobno javafx też jest raczej u schyłku. Chodzi o przyszłościową technologię, która najlepiej dawała spore możliwości w aplikacjach standalone, również web i android. O ile coś takiego jest.

z javowych rozwiązań to nie ma chyba niczego, co by obsługiwało wszystkie platformy, które wymieniłeś. jeśli chodzi o sam desktop to (jeśli już bardzo chciałbyś robić desktopowe apki w javie) celowałbym w użycie netbeans platform https://netbeans.apache.org/kb/docs/platform/ lub eclipse platform https://projects.eclipse.org/projects/eclipse.platform czyli już gotowych kobył do budowania apek, zamiast budować własną okienkową platformę (w swingu, swt czy czymkolwiek innym) od zera.

1

Co nie znaczy, że Swing nie miał wad - jak się nie przerobiło grubej nudnej książki - to w Swingu wychodziło obrzydliwe, nieresponywne GUI (jedyna zaleta, że działało). Obecnie uznaje takie frameworki (wymagające dużo czytania) za słabe (chociaż "działa, ale ewentualnie mało wydajnie" to nie jest aż taki zły efekt).

Zacząłem pracę w 2006 roku i trafiłem do zespołu, który robił "front" nie używaliśmy żadnych net beansów i tego typu rzeczy, wszystko ręcznie.
Bez żadnej książki ;)

Projekty w Swingu, w których coś robiłem przez ostatnie 17 lat:

Callmax - aplikacja desktopowa dla pracowników call center.
"Głodomór" - aplikacja desktopowa z modułem wyświetlania listy produktów w koszyku i modułem do odczytywania odcisków palca, którym można było zapłacić w sklepie
SAW - System do zarządzania służbami w sytuacjach kryzysowych(nie pamiętam nazwy) - triaż (oznaczanie ofiar wypadków/karamboli/katastrof) , tablety z windowsem (wtedy nazywało się to palmtopami) dla służb ratowniczych. System zarządzania słuzbami.

Bank: System udzielania kredytów i analizy historii kredytowej SWNG + jlnp (albo java web start - można było jara wrzucić na stronę - nie to nie był aplet!)
Program oparty o RMI + Swing, minitorowanie statusu serwera linuxowego (mała ikona w pasku zadań, obok zegarka, która byłą zielona jak było ok, a jak było nie ok to była czerwona i wyświetlała komunikat)

Program do obsługi zamówień na palmtopy z windows ME dla Londyńskiej Restauracji (to na lewo dla kolegi), z możliwością, dowolnego zmieniania, rozszerzania, chowania i przeciągania paneli (machnąłem w weekend)

System do monitorowania trakcji kolejowej

Na studia:
Program do wizualizacji wyników nauki sieci neuronowej.
Paint

Nadal, dzisiaj: niektóre bankomaty z Windowsem (tak w bankomatach jest windows!)

Pewnie jeszcze jakiegoś projektu zapomniałem.

PS: Swing pozwala napisać kod raz i odpalić GUI na windzie, Linuxie i Macu.

1

Odpowiadając, jeśli chcesz uczyć się GUI, to SWING, masz od razu wzorzec MVC i Observer-Observator (Listenery są obserwatorami)

0

Sądzę, że odpowiedzieliście na moje pytanie. Dziękuję. Przyjrzę się metodzie java - javasript.

1 użytkowników online, w tym zalogowanych: 0, gości: 1