Wybór GUI dla Javy i parsera XML

0

Witam,
Rozpocząłem naukę Javy. Piszę aplikację sieciową klient - serwer. Cel projektu? Poznać Jave, niewebowa tzn. parsowanie XML, obsluge gniazd, GUI, do tego jakies bazy danych moze z lekka nutka Hibernate.

Postanowiłem, że protokół sieciowy zostanie oparty o XML. Za pomocą strumieni będę więc przesyłał pewne wiadomości XML, a następnie je sparsuje.

Tu się pojawia pytanie: jaki parser wybrać? Ważne, aby program sam tworzył dokumenty XML (wysłanie wiadomości na serwer) oraz mógł je odczytywać. Core Java omawia parser SAX, czy to dobry wybór? Zależy mi na prostocie.

Zasadniczy problem to GUI. Dlatego chciałbym dobrze zrozumieć filozofię platformy. Początkowo myślałem o Java-FX, ale wydaje mi się bardzo dziwna. Myślę o tym, aby się przemóc tylko dlatego, że jest nowoczesna, bo skoro jest nowoczesna pewnie będzie używana w przyszłych projektach, również na desktopie.

Jestem średnio-zaawansowanym użytkownikiem Qt (QWidget/QtGui) i napisałem już kilka ładnych projektów w C++ z użyciem tego frameworka. Myślałem, że warto zrezygnować z Qt, bo mocno odbiega od filozofii Javy, a natywne rozwiązania bywają lepsze. Poza tym Qt Jambi nie ma wsparcia oficjalnego od firm Nokia / Digia, więc pewnie nikt tego nie używa w poważnych zastosowaniach.

Czy Java nie posiada odpowiednika WPF z języka C#?

1

Czy Java nie posiada odpowiednika WPF z języka C#?

No, mniej więcej ma. Nazywa się JavaFX. Dla JavyFX stworzono FXML i SceneBuildera jeśli lubisz takie podejście. Poza tym wsparcie dla multimediów, CSS, bindingi (property) znacznie przyjemniejsze niż te ze Swinga (BeansBindings), itd

JavaFX opiera się ogólnie na pomyśle zwanym Scene Graph, czyli interfejs tworzy się deklaratywnie (chyba dobrego słowa użyłem), a nie poprzez ręczne malowanie: http://docs.oracle.com/javafx/2/scenegraph/jfxpub-scenegraph.htm Oczywiście czasem ręczne malowanie jest potrzebne i do tego jest klasa Canvas w JavieFX 2.2+

Jeśli chodzi o komunikację - zastanawiałeś się nad czystym RMI lub jakimś wysokopoziomowym frameworkiem do przesyłania wiadomości np akka.io (chociaż akka jest robiona pod rozproszone sieci, a nie scentralizowane)? Ewentualnie JMS. Jeśli to będzie komunikacja tylko Java <=> Java, to nie ma sensu kopać się z XMLem.

0

Właściwie to myślałem o celowym użyciu XML, aby nauczyć się budować bardziej zaawansowane protokoły, parsowalne pliki konfiguracyjne itp. Czy SAX to mocno skomplikowany framework i warto pomyśleć nad alternatywą? Utworzyłbym własną klasę do parsowania XML i ona by decydowała jakie działanie ma podjąć klient / serwer na bazie otrzymanego strumienia.

Jeszcze zastanowię się nad Java-FX. Czy istnieje jakieś narzędie RAD dla Eclipse ala Qt Creator?

Chciałbym też poznać obiektywną opinię o Qt Jambi. Czy Digia planuje komercyjne wsparcie, bo sprawdziłem że Nokia je wycofała. Wiem, że używanie natywnych dll'ek w C++ psuje przenośność. Ale myślałem też o takim podejściu, aby samo GUI zrobić w oparciu o sygnały/sloty i widgety Qt. A pozostałe elementy np. wątki, kontenery typu lista brać z Javy, bo po to robię ten projekt: aby się jak najwięcej nauczyć. Pewnie i tak nikt tego nie używa.

0

O QtJambi nic nie wiem. Jeśli chodzi o edycję FXML to SceneBuilder może działać samodzielnie, nie potrzeba mu IDE, aczkolwiek Oracle tworzy go tak, żeby było go łatwo zintegrować z IDE i możliwe, że za jakiś czas będzie zintegrowane z innymi IDE niż NetBeans (do którego integracja jest na bieżąco).

Jeśli chodzi o XML to musisz się zastanowić po co ci to. Ogólnie XML stwarza moim zdaniem sporo problemów, a jego główną zaletą, moim zdaniem, jest liczba narzędzi do niego i przenośność między językami programowania. Jeśli już naprawdę potrzebujesz plików i to w postaci edytowalnej spoza programów Javowych, to polecam format JSON zamiast XML i bibliotekę do tego: http://jackson.codehaus.org/ JSON zdobywa szybko popularność i jest coraz szerzej wykorzystywany z biznesie, więc spokojnie możesz odstawić XMLa w hobbystycznym projekciku.

1

XML is bad, MKay.

0

Po namyśle biorę jednak Swing.

0

Nie warto, JavaFX w przyszłości zastąpi całkowicie Swinga, coraz częściej się ją stosuje w komercyjnych projektach (sam teraz w pracy piszę dość specjalistyczne oprogramowanie w niej).

0

Teraz to sobie namieszałem.

Prowadzący na uczelni odradził mi Java-FX, gdyż jego zdaniem są lepsze rozwiązania: podobno HTML 5 będzie w stanie zastąpić i ogólnie Java-FX jest go zdaniem słaba (ale mógł mieć informacje o starej wersji). Nienatywny wygląd to nie problem bo można go zawsze zmienić. Budując GUI niezależne od logiki i tak mogę podpiąć potem dowolny toolkit (MVC).

Odnośnie SWING, podobno intensywnie korzysta z wzoraca MVC i raczej nie zniknie w ciągu 5 lat, gdyż jest w standardowym JDK. Jakie są argumenty przeciw?

Boli mnie brak obiektywnych informacji o Qt Jambi, które pozwoliłby mi stwierdzić że jest to coś na tyle słabego, że należy o tym zapomnieć / no future.

Gdzie znajdę możliwie najlepszy tutorial o rozwijaniu desktopówek w Java-FX z użyciem narzędzi RAD?

Dzięki za informacje o JSON, przynajmniej wiem że to jest coś czego szukałem.

0

JavaFX Roadmap: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html
JavaFX będzie wspawana w JDK 8, więc nie wywalą jej.

JavaFX for Swing developers: http://docs.oracle.com/javafx/2/swing/jfxpub-swing.htm
W rozdziale "The JavaFX Advantage for Swing Developers" masz opisane część zalet JavyFX nad Swingiem.

Screencast o SceneBuilderze i NetBeans 7.2:

Moim zdaniem HTML5 będzie coraz bardziej popularny, ale potrzeba JavyFX i innych desktopowych toolkitów nie zniknie. Już teraz przeglądarki przy przeglądaniu neta zjadają po kilkaset megabajtów pamięci, a przecież jeszcze stronki nie mają takich funkcjonalności jak aplikacje desktopowe. W dodatku w przypadku HTML praktycznie wszystkie obliczenia odbywają się po stronie serwera, przez co jest więcej problemów ze skalowalnością.

0

W tym Java-FX dla Swing developers opisano łączenie kontrolek Swinga z tymi od Javy-FX. Czy jest to całkowicie normalne i typowe w tej technologii? Takie mieszanie toolkitów wydaje mi się b. dziwne.

0

Hmm, jak być nie wiedział to Swing jest nakładką na AWT, więc używając Swinga tak naprawdę używasz dwóch toolkitów naraz. Łączenie nie jest dziwne - udostępniono taką możliwość, ponieważ ogólnie w Swingu jest napisanych miliony kontrolek i aplikacji, a JavaFX 2.x jest jeszcze świeża. W takim razie jak ktoś chce użyć jakichś bajerów z JavyFX, a nie chce przepisywać całej aplikacji wraz ze wszystkimi wykorzystywanymi kontrolkami, to może sobie po prostu tylko parę paneli zrobić w JavieFX, a resztę zostawić.

Oprócz mieszania JavyFX ze Swingiem, można ją zmieszać z SWT: http://docs.oracle.com/javafx/2/swt_interoperability/jfxpub-swt_interoperability.htm i tutaj motywacja jest podobna.

0

Dzięki.

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