JavaFX e OpenJDK


109

Sto cercando di decidere se posso passare a JavaFX per l'interfaccia utente della mia applicazione Java. La maggior parte dei miei utenti utilizzerebbe Oracle JRE, che ha JavaFX integrato in questi giorni. Tuttavia, alcuni usano OpenJDK (su Linux). Questa (vecchia) domanda suggerisce che OpenJDK si occupa molto male di JavaFX. Secondo questa domanda, l'alternativa OpenJFX sarà completamente integrata in OpenJDK solo nella versione 9. Quindi la mia domanda è duplice:

  • Il supporto JavaFX in OpenJDK è ancora così grave?
  • In tal caso, esistono distribuzioni Linux che offrono già un pacchetto OpenJFX in modo che gli utenti non debbano crearlo da soli ?

Qual è la modalità di esecuzione della tua applicazione (come viene distribuita?)
jewelsea

@jewelsea Funziona come un programma autonomo.
mdriesen

@docM sarebbe una soluzione passare a oracle- (sun) -jdk per le macchine ubuntu? webupd8.org/2012/01/…
nyyrikki

@nyyrikki Questa è un'opzione. Ma preferisco restare con Java Swing se JavaFX e OpenJDK non si combinano.
mdriesen

2
@Yngve Ho portato tutto su JavaFX quando Ubuntu e Debian hanno iniziato a includere i pacchetti.
mdriesen

Risposte:


99

JavaFX fa parte di OpenJDK

Il progetto JavaFX stesso è open source e fa parte del progetto OpenJDK .

Aggiornamento dicembre 2019

Per informazioni aggiornate su come utilizzare Open Source JavaFX, visitare https://openjfx.io . Ciò include le istruzioni sull'utilizzo di JavaFX come libreria modulare accessibile da un JDK esistente (come un'installazione Open JDK ).

Il repository di codice open source per JavaFX si trova su https://github.com/openjdk/jfx .

Nella posizione di origine collegata, è possibile trovare i file di licenza per JavaFX aperto (attualmente questa licenza corrisponde alla licenza per OpenJDK: eccezione GPL + classpath).

Il wiki per il progetto si trova a: https://wiki.openjdk.java.net/display/OpenJFX/Main

Se desideri iniziare rapidamente a utilizzare JavaFX aperto, Belsoft Liberica JDK distribuzioni forniscono binari predefiniti di OpenJDK che (attualmente) includono JavaFX aperto per una varietà di piattaforme.

Per la distribuzione come applicazioni autonome, Java 14 implementerà JEP 343: Packaging Tool , che "Supporta formati di packaging nativi per offrire agli utenti finali un'esperienza di installazione naturale. Questi formati includono msi ed exe su Windows, pkg e dmg su macOS e deb e rpm su Linux. ", per la distribuzione di applicazioni basate su OpenJFX con programmi di installazione nativi e senza dipendenze dalla piattaforma aggiuntive (come un JDK preinstallato).


Informazioni meno recenti che potrebbero diventare obsolete nel tempo

Creazione di JavaFX dal repository OpenJDK

È possibile creare una versione aperta di OpenJDK (incluso JavaFX) completamente dall'origine che non ha dipendenze da Oracle JDK o codice sorgente chiuso.

Aggiornamento: utilizzo di una distribuzione JavaFX precostruita da sorgenti OpenJDK

Come notato nei commenti a questa domanda e in un'altra risposta, le distribuzioni Linux Debian offrono una distribuzione binaria JavaFX basata su OpenJDK:

(attualmente funziona solo per Java 8 per quanto ne so).

Differenze tra Open JDK e Oracle JDK rispetto a JavaFX

Le seguenti informazioni sono state fornite per Java 8. A partire da Java 9, la codifica VP6 è obsoleta per JavaFX e anche la tecnologia di distribuzione delle applicazioni incorporate di Oracle WebStart / Browser è deprecata . Quindi le versioni future di JavaFX, anche se distribuite da Oracle, probabilmente non includeranno alcuna tecnologia che non sia open source.

Oracle JDK include alcuni software non utilizzabili da OpenJDK. Ci sono due componenti principali che si riferiscono a JavaFX.

  1. Il codec video ON2 VP6, di proprietà di Google e Google non è open source.
  2. La tecnologia di distribuzione dell'applicazione Oracle WebStart / Browser Embedded.

Ciò significa che una versione aperta di JavaFX non può riprodurre file FLV VP6. Questa non è una grande perdita in quanto è difficile trovare codificatori VP6 o supporti codificati in VP6.

Altri formati video più comuni, come H.264, verranno riprodotti correttamente con una versione aperta di JavaFX (a condizione che i codec appropriati siano preinstallati sulla macchina di destinazione).

La mancanza di tecnologia di distribuzione WebStart / Browser Embedded ha davvero a che fare con OpenJDK stesso piuttosto che con JavaFX in particolare. Questa tecnologia può essere utilizzata per distribuire applicazioni non JavaFX.

Sarebbe fantastico se la comunità OpenSource sviluppasse una tecnologia di distribuzione per Java (e altri software) che sostituisse completamente i metodi di distribuzione WebStart e Browser Embedded, consentendo un'esperienza utente leggera e a basso impatto per la distribuzione delle applicazioni. Credo che siano stati avviati alcuni progetti per raggiungere tale obiettivo, ma non hanno ancora raggiunto un livello elevato di maturità e adozione.

Personalmente, ritengo che le distribuzioni WebStart / Browser Embedded siano una tecnologia legacy e attualmente ci sono modi migliori per distribuire molte applicazioni JavaFX (come le applicazioni autonome).

Aggiornamento dicembre 2019:

Una versione open source di WebStart per JDK 11+ è stata sviluppata ed è disponibile su https://openwebstart.com .

Chi ha bisogno di creare distribuzioni Linux OpenJDK che includono JavaFX

Spetta alle persone che creano pacchetti per distribuzioni Linux basate su OpenJDK (ad esempio Redhat, Ubuntu, ecc.) Creare RPM per JDK e JRE che includono JavaFX. Quei distributori di software, quindi, devono posizionare i pacchetti generati nei loro repository di codice di distribuzione standard (ad esempio, i repository yum della rete fedora / red hat). Attualmente ciò non viene fatto, ma sarei piuttosto sorpreso se i pacchetti Java 8 Linux non includessero JavaFX quando Java 8 verrà rilasciato a marzo 2014.

Aggiornamento, dicembre 2019 :

Ora che JavaFX è stato separato dalla maggior parte delle distribuzioni JDK e JRE binarie (inclusa la distribuzione Oracle) ed è, invece, disponibile come SDK autonomo, set di jmod o come dipendenze della libreria disponibile dal repository Maven centrale (come descritto come https://openjfx.io ), c'è meno bisogno che le distribuzioni Linux OpenJDK standard includano JavaFX.

Se desideri un JDK preconfigurato che includa JavaFX, considera le distribuzioni JDK di Liberica , fornite per una varietà di piattaforme.

Consulenza sulla distribuzione per applicazioni sostanziali

Consiglio di utilizzare la modalità di distribuzione dell'applicazione autonoma di Java .

Una descrizione di questa modalità di distribuzione è:

L'applicazione viene installata sull'unità locale e viene eseguita come programma autonomo utilizzando una copia privata dei runtime Java e JavaFX. L'applicazione può essere avviata allo stesso modo delle altre applicazioni native per quel sistema operativo, ad esempio utilizzando un collegamento sul desktop o una voce di menu.

È possibile creare un'applicazione autonoma dalla distribuzione Oracle JDK o da una build OpenJDK che include JavaFX. Attualmente è più facile farlo con Oracle JDK.

Poiché una versione di Java è fornita in bundle con la tua applicazione, non devi preoccuparti di quale versione di Java potrebbe essere stata preinstallata sulla macchina, quali capacità ha e se è compatibile o meno con il tuo programma. Invece, puoi testare la tua applicazione su una versione esatta del runtime Java e distribuirla con la tua applicazione. L'esperienza utente per la distribuzione dell'applicazione sarà la stessa dell'installazione di un'applicazione nativa sul proprio computer (ad esempio, un file .exe o un .msi di Windows installato, un .dmg di OS X, un .rpm o un .deb di Linux).

Nota: la funzione dell'applicazione autonoma era disponibile solo per Java 8 e 9 e non per Java 10-13. Java 14, tramite JEP 343: Packaging Tool , è pianificato per fornire nuovamente il supporto per questa funzione dalle distribuzioni OpenJDK.

Aggiornamento, aprile 2018: informazioni sull'attuale politica di Oracle verso sviluppi futuri


@Emmanuel, grazie per il tuo lavoro su questo. JavaFX fa parte di JDK, quindi (almeno fino a quando JDK non diventa modularizzato) non sono sicuro del motivo per cui ci sarebbe un pacchetto OpenJFX separato invece di includere tutti i file di runtime necessari nel pacchetto OpenJDK standard (come si fa con il Distribuzioni Oracle JDK). La mailing list open-jfx sarebbe un buon posto se fossero necessarie ulteriori discussioni.
jewelsea

Un pacchetto separato offre un certo grado di flessibilità se qualcuno è interessato a JDK ma non a JavaFX. Dopo tutto, la modularizzazione non è un obiettivo per Java 9? :)
Emmanuel Bourg

11
"Al momento questo non viene fatto, ma sarei piuttosto sorpreso se i pacchetti Java 8 Linux non includessero JavaFX quando Java 8 verrà rilasciato nel marzo 2014". Devi essere sorpreso perché OpenJDK 8 non include OpenJFX.

2
Arch Linux ha anche pacchetti per openjfx: archlinux.org/packages/?name=java-openjfx
Maciek Łoziński

2
@NoBugs Questa potrebbe essere una risposta un po 'troppo tarda per essere utile, ma Ubuntu 14.04 non include OpenJDK 8, motivo per cui non riesci a trovare il pacchetto JFX corrispondente. Non ricordo quale versione di Ubuntu l'abbia introdotto, ma è sicuramente disponibile in Ubuntu 16.04 - insieme al pacchetto "openjfx".
Mike Allen

50

Per me questo ha funzionato.

$ sudo apt-get install openjfx

3
Probabilmente il modo più semplice per aggiungere JavaFX al tuo JDK Linux
Reimeus

Sebbene questa sia la risposta giusta per molti, alcuni sistemi operativi non forniscono questo pacchetto. Per coloro che non lo fanno webupd8 PPAper Ubuntu e il programma di fedyinstallazione desktop per Fedora sono due modi rapidi per configurare l'ultimo Oracle JDK / JRE che include JavaFX.
tresf

3
Per Ubuntu 18.04, dipende ancora da Java 8, ma quello predefinito è java 10. Se lo installi, ti ritroverai con 2 java.
jgomo3

Secondo Come installare openjfx insieme a openjdk-11? , per le versioni Java 11+, per utilizzare JavaFX, invece di apt-get install openjfx(che attualmente funziona solo per Java 8), puoi utilizzare le istruzioni dal sito web openjfx.io , dove JavaFX è "disponibile come SDK specifico della piattaforma, come numero di jmods e come un insieme di artefatti in Maven central. ".
jewelsea

Un pacchetto Debian openjfx è stato rilasciato per OpenJDK-11 su tracker.debian.org/pkg/openjfx , quindi forse questo metodo. sudo apt-get install openjfx, continuerà a essere supportato e funzionerà per le versioni successive di JavaFX e ubuntu. Si noti che i pacchetti Debian openjfx non sembrano essere aggiornati con la stessa frequenza delle librerie distribuite da openjfx.io, quindi se si desidera utilizzare la versione più aggiornata, probabilmente è meglio utilizzare una distribuzione openjfx.io.
jewelsea

11

Come soluzione rapida è possibile copiare il file JAR runtime JavaFX e quelli a cui si fa riferimento da Oracle JRE (JDK) o da qualsiasi applicazione autonoma che utilizza JavaFX (ad esempio JavaFX Scene Builder 2.0 ):

cp <JRE_WITH_JAVAFX_HOME>/lib/ext/jfxrt.jar     <JRE_HOME>/lib/ext/
cp <JRE_WITH_JAVAFX_HOME>/lib/javafx.properties <JRE_HOME>/lib/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libprism_*  <JRE_HOME>/lib/amd64/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libglass.so <JRE_HOME>/lib/amd64/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libjavafx_* <JRE_HOME>/lib/amd64/

assicurati solo di avere gtk 2.18 o superiore


Non riesco a trovare dove openjfx è installato in Ubuntu 18.04, ma ho rubato questi barattoli e altri file da un altro programma installato nel mio disco rigido (puoi controllare qualcosa come phpstorm o clion :)) e ha funzionato a meraviglia. Grazie
Heichou

Ho copiato i file da JDK1.8.0_251 (Oracle Java 1.8) a java-8-openjdk-amd64 (repository ubuntu OpenJDK 8). Non era ancora in grado di eseguire file jar con JavaFX. Ma quando mi collegavo semplicemente a jfxrt.jar come un jar di libreria esterno nel mio percorso di build Eclipse, i programmi venivano eseguiti nel contesto Eclipse. L'esecuzione di "apt-cache policy libgtk2.0-0" ha fornito "Installato: 2.24.32-1ubuntu1"
Phil Freihofner il

7

Rispondendo anche a questa domanda:

Dove posso trovare librerie JavaFX predefinite per OpenJDK (Windows)

Su Linux non è proprio un problema, ma su Windows non è così facile, soprattutto se si desidera distribuire JRE.

Puoi effettivamente usare OpenJFX con OpenJDK 8 su Windows, devi solo assemblarlo da solo:

Scarica OpenJDK da qui: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Scarica OpenJFX da qui: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

copia tutti i file dallo zip OpenFX sopra il JDK, voilà, hai un OpenJDK con JavaFX.

Aggiornamento :

Fortunatamente da Azul ora c'è una build OpenJDK + OpenJFX che può essere scaricata dalla loro pagina della comunità: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx


Grazie. Ho controllato il sito github AdoptOpenJDK ma dice "repository legacy". Sai dove è disponibile un binario OpenJFX più recente corrispondente alle build del nuovo repository github.com/AdoptOpenJDK/openjdk8-binaries/releases ?
Houtman

3

Prova obuildfactory .

C'è bisogno di modificare questi script (contiene errori e non fa esattamente la "cosa" richiesta), caricherò i miei script biforcati da obuildfactory nei prossimi giorni. e quindi aggiornerò di conseguenza anche la mia risposta.

Fino ad allora divertitevi, signore :)


1
sfortunatamente non esiste una controparte Windows per OpenJFX
madduci

0

Secondo Oracle, l'integrazione di OpenJDK e javaFX sarà il primo trimestre del 2014 (vedere la roadmap: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Quindi, per la prima domanda la risposta è che devi aspettare fino ad allora. Per la seconda domanda non c'è altro modo. Quindi, per ora vai con java swing o avvia javaFX e aspetta


il collegamento nella tua risposta è interrotto. La cosa che si chiude in una pagina simile è oracle.com/us/corporate/press/1854982
ILMostro_7

@ ILMostro_7 il link nel tuo commento è interrotto
Blake

È abbastanza vecchio. Sono sicuro che cambieranno il loro sito man mano che nuovi piani prendono forma.
ILMostro_7

Il seguente sito indica che javafx sarà una libreria autonoma a partire da java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.