Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: registrovany123 07. 04. 2021, 16:42:36

Název: Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: registrovany123 07. 04. 2021, 16:42:36
Da se dneska napsat aplikace v Jave tak, ze by jela i na Adroidu? Resp. obracene, udelat aplikaci s GUI tak, aby to nejelo jen na Adroidu, ale i na Windows nebo na Linuxu?

Jsem Javista uz pres 5 let, ale jeste nikdy jsem nedelal aplikaci pro Android, jsem backendak, tak vlastne nevim, co to vsechno umi. V podstate mi jde o neco podobneho co umoznuje treba Xamarin od .NETu.
Název: Re:Vyroba multiplatformni aplikace s GUI v Jave
Přispěvatel: Ondrej Nemecek 07. 04. 2021, 17:36:05
V praxi jsem to nezkoušel, ale koukněte na https://gluonhq.com/ a https://gluonhq.com/products/mobile/javafxports/

Případně lze některé situace řešit během aplikace v prohlížeči - https://www.jpro.one/ a https://www.webswing.org/

Jinak v JavaFX se dělá celkem příjemně https://openjfx.io/
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Daniel Novotný 07. 04. 2021, 18:37:04
Já takhle trochu narazil. V roce 2007 jsem napsal adventuru určenou pro uživatele jednoho diskusního serveru: zvolil jsem právě Javu (tehdy Swing) protože třetina používala Windows, třetina Mac a třetina Linux. Docela to tehdy mělo úspěch, proto jsem se rozhodl vyvinout jinou adventuru, tentokrát s obecně známými vtípky, aby nebyla jenom specifická pro ten server: protože jsem neměl čas, tak se vývoj protáhl až do pandemické doby, kdy se nějaký ten čas našel a já hru dodělal. Použil jsem právě Javu a Swing, protože jsem měl z toho roku 2007 hotovou knihovnu na GUI.

Ovšem narazil jsem na to, že dneska už dost málo lidí má na desktopu nainstalovanou Javu. A hra jim většinou nestojí za to, aby si ji tam dali, zvlášť když to představuje třeba i bezpečnostní rizika. Nevím, zda by to s vaší aplikací nebylo podobně.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: tomas88 07. 04. 2021, 18:38:05
Nejaky reseni jsou, ale zadne seriozni nepocita s javou. Nebo alespon ja jsem zadne takove nepotkal.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: hazardrok 07. 04. 2021, 20:22:01
JavaFX port a gluon je z pohledu multiplatformnosti docela použitelné řešení. Spolupracuji na vývoji jedné aplikace (ne jako programátor, ale jako zadavatel), která je v tomto psaná a skutečně aplikace funguje stejně na androidu, linuxu i na MACu. Na ničem jiném jsem to neviděl, ale asi to bude fungovat. Toto byl totiž jeden z důvodů proč jsme tento projekt chtěli podpořit. Bohužel aktuální situace je taková, že po několika letech se celý projekt zahodil a začalo se znovu a to NEmultiplatformní cestou. Důvodem je podle programátora:
1. Pomalá reakce vývojářů JavaFXPortu na stále se zrychlující tempo vývoje mobilních technologií. A díky tomu nutnost stále něco znásilňovat.
2. Samotná multiplatformnost se ukázala jako problém, protože každý OS se trochu jinak ovládá a je potřeba tvořit specifické vyjímky.
3. Nová finanční politika JavaFX vývojářů způsobila, že se projekt pokud se nehodlá prodávat nevyplatí financovat. Původně tuším stačilo za pár desítek dolarů zakoupit přístup na pár tejdnů. Nyní je to asi na rok a cena je vysoká. Toto asi neplatí pokud si člověk vyvíjí aplikaci jen pro sebe. Pak je to možná s nějakým omezením "zadarmo".


Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Ondrej Nemecek 07. 04. 2021, 21:38:30
Ovšem narazil jsem na to, že dneska už dost málo lidí má na desktopu nainstalovanou Javu.

Není problém javu přibalit k aplikaci, takže ve výsledku uživatel o žádné javě neví. Lze přibalit i jen používané části, takže se redukuje velikost. Potřebné nástroje jdeps, jlink, javapackager jsou již součástí standardní openjdk a funguje to dobře.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Ondrej Nemecek 07. 04. 2021, 22:16:12
3. Nová finanční politika JavaFX vývojářů způsobila, že se projekt pokud se nehodlá prodávat nevyplatí financovat. Původně tuším stačilo za pár desítek dolarů zakoupit přístup na pár tejdnů. Nyní je to asi na rok a cena je vysoká. Toto asi neplatí pokud si člověk vyvíjí aplikaci jen pro sebe. Pak je to možná s nějakým omezením "zadarmo".

Samotnou Java FX lze použít bez jakékoli licence v plném rozsahu. JavaFXPorts (aby javafx běžela na mobilech) snad také (obojí je současně opensource). Nad tím je teprve postavený business Gluonu -  Mobile, CloudLink, podpora a další služby. Ceník Gluonu https://gluonhq.com/pricing/ a https://gluonhq.com/download/cloudlink-pricing/

Ono ani ostatní řešení také nejsou zadarmo a nejsou ani všespásná. Takže se opravdu může v řadě případů vyplatit dělat klasicky více samostatných aplikací pomocí nativních prostředků...
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Andrej Kvasnica 08. 04. 2021, 11:38:14
Ovšem narazil jsem na to, že dneska už dost málo lidí má na desktopu nainstalovanou Javu. A hra jim většinou nestojí za to, aby si ji tam dali, zvlášť když to představuje třeba i bezpečnostní rizika.
Ake bezpecnostne rizika predstavuje pridanie java runtime na pocitac?
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Ondrej Nemecek 08. 04. 2021, 19:07:04
Stejné jako provoz jiného software, tj. hlavně nutnost aktualizací? Ale to se týká právě každého software, takže jako argument to je celkem k ničemu. Javu bych v daném případě přibalil k programu a prostě vydával aktualizované verze programu i při vydání nové verze javy. Protože autor by měl stejně svůj program testovat vůči novým verzím javy, tedy pokud chce držet aktuálnost a funkčnost (a to bez rozdílu na tom, jak se ta java do pc uživatele dostane). Takže pak už není tolik práce navíc vydat nový aktualizovaný balíček.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: anonacct 09. 04. 2021, 10:54:06
JavaFX je mrtvá technologie - nemá vývoj ani komunitu. Ušetři si čas a uteč.

Už i Electron by byla lepší investice pro cross-platform produkt.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Michael Kalouš 09. 04. 2021, 12:13:37
Tady je dobrá rada drahá. Jedna možnost je opravdu risknout to s JavaFX. Pokud to dobře dopadne, tak vznikne jeden kód v Javě pro všechny cílové platformy, což by byla lahoda. 

Pokud by postačil desktop (Win/Lin/Mac) + Android, tak bych zkusil výrazně oddělit UI od logiky a udělat jedno UI pro Android (přes standardní Java Android knihovny) a druhé pro desktop. A na desktopu babo raď. Swing, JavaFX nebo SWT. Který z toolkitů je menší zombie?. Jenomže tak je ze hry iOS.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: none_ 09. 04. 2021, 13:12:29
Pokud bych delal neco, co by se melo dat pouzit vsude, tak bych se drzel HTML5. Myslim, ze pro vsechny tyto platformy existuje moznost tvarit se, ze webova stranka je aplikace.

Otazka je, jestli to neni spis na obtiz. Pochybuju, ze by bylo optimalni mit pro vsechny platformy stejny vzhled UI (uz jenom proto, ze se ovladaji jinak) a potom muze byt stylovani mnohem komplikovanejsi, nez kdyby mela kazda platforma sve jednoduche UI (nebo aspon mobily a desktopy zvlast).

Obecne UI Java technologie nejsou uplne ve skvele forme. Hlavne na desktopu. Android je trochu jiny pripad, ale tam pak nejsou ty aplikace vubec prenositelne.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Ondrej Nemecek 09. 04. 2021, 16:44:41
JavaFX je dobře navržená platforma a nepřijde mi zas tak mrtvá. Akorát by mohla být rozšířenější a s větší komunitou, to ano. Bohužel, dnes vše běží v prohlížeči a vyvíjí se v javascriptu nebo transpilovaných jazycích. Ale IMHO se to kyvadlo pomalu překlopí a bude se víc vyvíjet pro desktop, byť s cloudem někde na pozadí. Já si myslím že se oba přístupy (desktop vs. browser) obohacují, takže v tom nevidím moc problém. Chtělo by to dotáhnout ty hybridní platformy jako je Electron - on se deploy javafx aplikace s přibalenou javou nápadně podobá Elektron aplikacím co se týče velikosti, nároků a nedostatků. Takže jde o systémový problém. V případě javy s tím může ještě docela pohnout GraalVM, v případě browseru WASM.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: anonacct 09. 04. 2021, 17:57:44
Všichni ti příznivci JavaFX - dejte sem linky na ty vaše JavaFX aplikace, na kterých tak usilovně pracujete :)

Ale tak jestli s tím někdo chce zabíjet čas...
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Andrej Kvasnica 12. 04. 2021, 19:01:46
Všichni ti příznivci JavaFX - dejte sem linky na ty vaše JavaFX aplikace, na kterých tak usilovně pracujete :)

Awesome JavaFX (https://github.com/mhrimaz/AwesomeJavaFX)
A curated list of awesome JavaFX frameworks, libraries, books etc...
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Petr Jahoda 12. 04. 2021, 19:50:46
Všichni ti příznivci JavaFX - dejte sem linky na ty vaše JavaFX aplikace, na kterých tak usilovně pracujete :)

Ale tak jestli s tím někdo chce zabíjet čas...

Ja v tom par let nazpet delal par absolutne ruznych aplikaci (jakoze vselijake servisni aplikace, aplikaci pro navstevy vcetne grafu a statistik, apod.) a i kdyz ted GUI aplikace nedelam, porad mam v hlave javufx zafixovanou jako nejjednodussi na rychle udelani jakehokoliv multiplatformniho gui klikatka.

Priklad, viz. obrazek. Strasne rychle se to da udelat a nemusel sem resil, kdo ma co za operacni system: https://ibb.co/xfk0m4j (https://ibb.co/xfk0m4j)

V tomhletom https://gluonhq.com/products/scene-builder/ (https://gluonhq.com/products/scene-builder/) si udelate GUI a pak to jen sparujete na pozadi s kodem a je to. IntellijIdea to ma i propojene, takze fakt jako vyvoj rychly.

Jo, kdyz o tom ted premyslim, neco jako JavaFX mi chybi pro Go :-)
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Ondrej Nemecek 12. 04. 2021, 20:45:36
...a hlavně dotaz zněl na multiplatformní vývoj v javě a tam je odpověď JavaFX zcela validní možnost. Základní charakteristika odpovídá současnému standardu:


IMHO se to podobá QT (disclaimer: nejsem QT vývojář, QT znám pouze z doslechu).

Nedostatky by se pochopitelně našly taky - víceméně je znát, že JavaFX není zas tak rozšířená, takže některé věci si musí člověk prošlapat sám a něco není standardně dostupné (nenašel jsem např. použitelný docking systém, chybí podpora system tray, ...). Nicméně v době Electron aplikací se ledacos ztratí, takže...  :D
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: technomaniak 14. 04. 2021, 13:19:48
Taky přidám názor :

Vše závisí pro jakou verzi SE?
-pokud 4,5,6,7,11,12+, pak rozhodně Swing. Starý, odladěný, spousta návodů, stále implementován v JavaSE.
-pokud 8,9,10 pak možná JavaFX

Přestože JavaFX se mi zdá pěknější než Swing, tak například ta FXML mě vůbec nesedla. Radši jsem to programoval vše v kódu. Navíc jak byla v SE11+a odstraněna z JDK, protože se příliš nechytla se to trochu zkomplikovalo. Tím, že jsou knihovny JavaFX plně modulární, tak to dělá problémy u nemodulárních projektů s tvorbou spustitelných jar.(samozřejmě lze to obejít ale práce navíc). Samozřejmě při tvorbě modulárního run-time projektu vše je v pohodě.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: okalousek 14. 04. 2021, 13:42:17
Všichni ti příznivci JavaFX - dejte sem linky na ty vaše JavaFX aplikace, na kterých tak usilovně pracujete :)

Ale tak jestli s tím někdo chce zabíjet čas...

Ja v tom par let nazpet delal par absolutne ruznych aplikaci (jakoze vselijake servisni aplikace, aplikaci pro navstevy vcetne grafu a statistik, apod.) a i kdyz ted GUI aplikace nedelam, porad mam v hlave javufx zafixovanou jako nejjednodussi na rychle udelani jakehokoliv multiplatformniho gui klikatka.

Priklad, viz. obrazek. Strasne rychle se to da udelat a nemusel sem resil, kdo ma co za operacni system: https://ibb.co/xfk0m4j (https://ibb.co/xfk0m4j)

V tomhletom https://gluonhq.com/products/scene-builder/ (https://gluonhq.com/products/scene-builder/) si udelate GUI a pak to jen sparujete na pozadi s kodem a je to. IntellijIdea to ma i propojene, takze fakt jako vyvoj rychly.

Jo, kdyz o tom ted premyslim, neco jako JavaFX mi chybi pro Go :-)
Psát v Go GUI? Není na to moc knihoven a boilerplate to také moc neušetří.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Ondrej Nemecek 14. 04. 2021, 16:09:15
Taky přidám názor :

Vše závisí pro jakou verzi SE?
-pokud 4,5,6,7,11,12+, pak rozhodně Swing. Starý, odladěný, spousta návodů, stále implementován v JavaSE.
-pokud 8,9,10 pak možná JavaFX

Přestože JavaFX se mi zdá pěknější než Swing, tak například ta FXML mě vůbec nesedla. Radši jsem to programoval vše v kódu. Navíc jak byla v SE11+a odstraněna z JDK, protože se příliš nechytla se to trochu zkomplikovalo. Tím, že jsou knihovny JavaFX plně modulární, tak to dělá problémy u nemodulárních projektů s tvorbou spustitelných jar.(samozřejmě lze to obejít ale práce navíc). Samozřejmě při tvorbě modulárního run-time projektu vše je v pohodě.

Proč to dělení dle verze? Úplně nerozumím. IMHO možná bych akorát zvážil to držet se LTS verzí (Java SE 11).

Jinak mám nemodulární projekty ke kterým si buildím runtime pomocí jdeps a jlink a balím pomoc jpackage a na problém jsem nenarazil. Pokud je runtime standardní s extra instalací javafx, musí se předat javě správné parametry - to je pravda, ale taková specifika mají všechny frameworky a nevidím v tom nic co bych považovat za chybu. Co se týče jpackage, je sice v plenkách, ale pokud nevyhovuje, není problém použít jiný balíčkovací nástroj/instalátor. Neměl bych nic ani proti Swingu, jsou pro něj komponenty, které v javafx chybí, ale ten look and feel mi přijde dnes už hůře obhajitelný. Taky nevím, jak je na tom teď s podporou HiDPI, ale nebylo to nic moc. FXML nemusíte používat, současně jej můžete používat s vlastními komponentami - oboje je výhoda. SceneBuilder a celý postup práce by chtěl sice více dotáhnout, ale použít se to dá.
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: Ondrej Nemecek 14. 04. 2021, 16:26:46
PS: Koukám, že zrovna vyšla nová verze SceneBuilderu  :) Doporučuju na to kouknout https://github.com/gluonhq/scenebuilder https://docs.gluonhq.com/scenebuilder/ https://gluonhq.com/products/scene-builder/
Název: Re:Výroba multiplatformní aplikace s GUI v Javě
Přispěvatel: technomaniak 14. 04. 2021, 21:39:18

Proč to dělení dle verze? Úplně nerozumím. IMHO možná bych akorát zvážil to držet se LTS verzí (Java SE 11).

Jinak mám nemodulární projekty ke kterým si buildím runtime pomocí jdeps a jlink a balím pomoc jpackage a na problém jsem nenarazil. Pokud je runtime standardní s extra instalací javafx, musí se předat javě správné parametry - to je pravda, ale taková specifika mají všechny frameworky a nevidím v tom nic co bych považovat za chybu. Co se týče jpackage, je sice v plenkách, ale pokud nevyhovuje, není problém použít jiný balíčkovací nástroj/instalátor. Neměl bych nic ani proti Swingu, jsou pro něj komponenty, které v javafx chybí, ale ten look and feel mi přijde dnes už hůře obhajitelný. Taky nevím, jak je na tom teď s podporou HiDPI, ale nebylo to nic moc. FXML nemusíte používat, současně jej můžete používat s vlastními komponentami - oboje je výhoda. SceneBuilder a celý postup práce by chtěl sice více dotáhnout, ale použít se to dá.

Dneska mám pohodovou náladu a tak budu reagovat. A dokonce nebudu ani agresivní a prohlásím, že jsem to možná chybně zformuloval.

Nemluvím, že je problém tvorba run-time image(projekt+jvm) u nemodulárních/modulárních projektu. Nemluvím o spuštění přes příkazový řádek s parametry u kterých specifikuji dané moduly. Mluvím o tom, že je problém(jenž má několik podstatně složitějších řešení)použít modulární knihovny příp. frameworky a vyrobit spustitelný build(tvz. runnable jar), který spustíš double-clickem např. z plochy, z total commanderu, apod..