JavaFX i OpenJDK


109

Próbuję zdecydować, czy mogę przełączyć się na JavaFX dla interfejsu użytkownika mojej aplikacji Java. Większość moich użytkowników korzystałaby z Oracle JRE, które obecnie ma zintegrowany JavaFX. Jednak niektórzy używają OpenJDK (w systemie Linux). To (stare) pytanie sugeruje, że OpenJDK bardzo źle radzi sobie z JavaFX. Zgodnie z tym pytaniem, alternatywny OpenJFX będzie w pełni zintegrowany z OpenJDK dopiero w wersji 9. Moje pytanie jest więc dwojakie:

  • Czy obsługa JavaFX w OpenJDK jest nadal taka zła?
  • Jeśli tak, to czy są jakieś dystrybucje Linuksa, które już oferują pakiet OpenJFX, więc użytkownicy nie musieliby go tworzyć samodzielnie ?

Jaki jest tryb wykonywania Twojej aplikacji (jak jest wdrażana?)
jewelsea

@jewelsea Działa jako samodzielny program.
mdriesen

@docM czy byłoby rozwiązaniem przełączenie się na oracle- (sun) -jdk dla maszyn ubuntu? webupd8.org/2012/01/…
nyyrikki

@nyyrikki To jest opcja. Ale wolałbym pozostać przy Java Swing, jeśli JavaFX i OpenJDK nie mieszają się.
mdriesen

2
@Yngve Przeportowałem wszystko do JavaFX, gdy Ubuntu i Debian zaczęły dołączać pakiety.
mdriesen

Odpowiedzi:


99

JavaFX jest częścią OpenJDK

Sam projekt JavaFX jest open source i jest częścią projektu OpenJDK .

Zaktualizuj grudzień 2019 r

Aktualne informacje na temat korzystania z Open Source JavaFX można znaleźć na stronie https://openjfx.io . Obejmuje to instrukcje dotyczące używania JavaFX jako biblioteki modułowej, do której można uzyskać dostęp z istniejącego JDK (np. Instalacja Open JDK ).

Repozytorium kodu open source dla JavaFX znajduje się pod adresem https://github.com/openjdk/jfx .

W podlinkowanej lokalizacji źródłowej można znaleźć pliki licencji dla otwartego JavaFX (obecnie ta licencja jest zgodna z licencją dla OpenJDK: wyjątek GPL + ścieżka klas).

Wiki projektu znajduje się pod adresem : https://wiki.openjdk.java.net/display/OpenJFX/Main

Jeśli chcesz szybko rozpocząć korzystanie z otwartego JavaFX, dystrybucje Belsoft Liberica JDK zapewniają gotowe pliki binarne OpenJDK, które (obecnie) zawierają otwarty JavaFX dla różnych platform.

Java 14 ma wdrożyć narzędzie JEP 343: Packaging Tool , które „obsługuje natywne formaty pakowania, aby zapewnić użytkownikom końcowym naturalną instalację. , oraz deb i rpm w systemie Linux. ”, do wdrażania aplikacji opartych na OpenJFX z natywnymi instalatorami i bez dodatkowych zależności platformy (takich jak preinstalowany pakiet JDK).


Starsze informacje, które z czasem mogą stać się nieaktualne

Tworzenie JavaFX z repozytorium OpenJDK

Możesz zbudować otwartą wersję OpenJDK (w tym JavaFX) całkowicie ze źródła, które nie ma zależności od Oracle JDK lub zamkniętego kodu źródłowego.

Aktualizacja: Korzystanie z dystrybucji JavaFX wstępnie zbudowanej ze źródeł OpenJDK

Jak zauważono w komentarzach do tego pytania i innej odpowiedzi, dystrybucje Debian Linux oferują dystrybucję binarną JavaFX opartą na OpenJDK:

(obecnie działa to tylko dla Java 8, o ile wiem).

Różnice między Open JDK i Oracle JDK w odniesieniu do JavaFX

Poniższe informacje zostały podane dla języka Java 8. Od wersji Java 9 kodowanie VP6 jest nieaktualne dla JavaFX, a technologia wdrażania aplikacji osadzonych w Oracle WebStart / Browser również jest przestarzała . Dlatego przyszłe wersje JavaFX, nawet jeśli są dystrybuowane przez Oracle, prawdopodobnie nie będą zawierać żadnej technologii, która nie jest open source.

Oracle JDK zawiera oprogramowanie, którego nie można używać z OpenJDK. Istnieją dwa główne komponenty związane z JavaFX.

  1. Kodek wideo ON2 VP6, który jest własnością Google i Google nie ma otwartego źródła.
  2. Technologia wdrażania aplikacji Oracle WebStart / Browser Embedded.

Oznacza to, że otwarta wersja JavaFX nie może odtwarzać plików VP6 FLV. Nie jest to duża strata, ponieważ trudno jest znaleźć kodery VP6 lub multimedia zakodowane w VP6.

Inne bardziej popularne formaty wideo, takie jak H.264, będą odtwarzane dobrze z otwartą wersją JavaFX (o ile masz wstępnie zainstalowane odpowiednie kodeki na maszynie docelowej).

Brak technologii wdrażania WebStart / Browser Embedded ma tak naprawdę coś wspólnego z samym OpenJDK, a nie konkretnie z JavaFX. Tej technologii można używać do wdrażania aplikacji innych niż JavaFX.

Byłoby wspaniale, gdyby społeczność OpenSource opracowała technologię wdrażania dla języka Java (i innego oprogramowania), która całkowicie zastąpiłaby metody wdrażania WebStart i Browser Embedded, umożliwiając przyjemną lekkość i niewielki wpływ na dystrybucję aplikacji. Wydaje mi się, że były projekty, które zaczęły służyć temu celowi, ale nie osiągnęły jeszcze wysokiej dojrzałości i stopnia przyjęcia.

Osobiście uważam, że wdrożenia WebStart / Browser Embedded to starsza technologia i obecnie istnieją lepsze sposoby wdrażania wielu aplikacji JavaFX (takich jak aplikacje niezależne).

Aktualizacja grudzień 2019:

Opracowano otwartą wersję oprogramowania WebStart dla JDK 11+, która jest dostępna pod adresem https://openwebstart.com .

Kto musi tworzyć dystrybucje Linux OpenJDK, które zawierają JavaFX

To od ludzi, którzy tworzą pakiety dla dystrybucji Linuksa opartych na OpenJDK (np. Redhat, Ubuntu itp.), Zależy tworzenie RPM dla JDK i JRE, które zawierają JavaFX. Ci dystrybutorzy oprogramowania muszą następnie umieścić wygenerowane pakiety w swoich standardowych repozytoriach kodu dystrybucyjnego (np. Repozytoria yum w sieci fedora / red hat). Obecnie nie jest to robione, ale byłbym dość zaskoczony, gdyby pakiety Java 8 Linux nie zawierały JavaFX, gdy Java 8 zostanie wydana w marcu 2014.

Aktualizacja, grudzień 2019 r . :

Teraz, gdy JavaFX został oddzielony od większości binarnych dystrybucji JDK i JRE (w tym dystrybucji Oracle) i zamiast tego jest dostępny jako samodzielny SDK, zestaw jmods lub jako zależność biblioteki dostępna z centralnego repozytorium Maven (jak opisano w https://openjfx.io ), nie ma potrzeby, aby standardowe dystrybucje Linux OpenJDK zawierały JavaFX.

Jeśli potrzebujesz gotowego JDK , który zawiera JavaFX, rozważ dystrybucje Liberica JDK , które są dostarczane dla różnych platform.

Porady dotyczące wdrażania w przypadku znaczących aplikacji

Radzę używać samodzielnego trybu wdrażania aplikacji Java .

Opis tego trybu wdrażania to:

Aplikacja jest instalowana na dysku lokalnym i działa jako samodzielny program przy użyciu prywatnej kopii środowiska wykonawczego Java i JavaFX. Aplikację można uruchomić w taki sam sposób, jak inne aplikacje natywne dla tego systemu operacyjnego, na przykład za pomocą skrótu na pulpicie lub pozycji menu.

Samodzielną aplikację można zbudować z dystrybucji Oracle JDK lub z kompilacji OpenJDK, która zawiera JavaFX. Obecnie jest to łatwiejsze dzięki Oracle JDK.

Ponieważ wersja Java jest dołączona do Twojej aplikacji, nie musisz martwić się o to, jaka wersja Java mogła zostać wstępnie zainstalowana na komputerze, jakie ma możliwości i czy jest zgodna z Twoim programem. Zamiast tego możesz przetestować swoją aplikację pod kątem dokładnej wersji środowiska wykonawczego Java i rozpowszechniać ją wraz z aplikacją. Doświadczenie użytkownika związane z wdrażaniem aplikacji będzie takie samo, jak podczas instalowania aplikacji natywnej na ich komputerze (np. Zainstalowany plik Windows .exe lub .msi, OS X .dmg, Linux .rpm lub .deb).

Uwaga: funkcja samodzielnej aplikacji była dostępna tylko dla Java 8 i 9, a nie dla Java 10-13. Java 14, za pośrednictwem JEP 343: Packaging Tool , ma ponownie zapewnić obsługę tej funkcji z dystrybucji OpenJDK.

Aktualizacja, kwiecień 2018 r .: Informacje o aktualnej polityce firmy Oracle dotyczącej przyszłych zmian


@Emmanuel, Dziękuję za twoją pracę nad tym. JavaFX jest częścią JDK, więc (przynajmniej do czasu, gdy JDK zostanie zmodularyzowany) nie jestem pewien, dlaczego miałby istnieć oddzielny pakiet OpenJFX zamiast włączać wszystkie niezbędne pliki uruchomieniowe do standardowego pakietu OpenJDK (tak jak jest to zrobione z Dystrybucje Oracle JDK). Lista dyskusyjna otwartym JFX byłoby dobre miejsce, jeśli wymagana jest dalsza dyskusja.
jewelsea

Osobny pakiet daje pewną elastyczność, jeśli ktoś jest zainteresowany JDK, ale nie JavaFX. Czy w końcu modularyzacja nie jest celem Java 9? :)
Emmanuel Bourg

11
„Obecnie nie jest to robione, ale byłbym bardzo zaskoczony, gdyby pakiety Java 8 Linux nie zawierały JavaFX, gdy Java 8 zostanie wydana w marcu 2014”. Musisz być zaskoczony, ponieważ OpenJDK 8 nie zawiera OpenJFX.

2
Arch Linux ma również pakiety dla openjfx: archlinux.org/packages/?name=java-openjfx
Maciek Łoziński

2
@NoBugs To może być trochę za późno odpowiedź, aby była użyteczna, ale Ubuntu 14.04 nie zawiera OpenJDK 8, dlatego nie możesz znaleźć odpowiedniego pakietu JFX. Nie pamiętam, które wydanie Ubuntu go wprowadziło, ale na pewno jest dostępne w Ubuntu 16.04 - razem z pakietem „openjfx”.
Mike Allen

50

U mnie to zadziałało.

$ sudo apt-get install openjfx

3
Prawdopodobnie najłatwiejszy sposób na dodanie JavaFX do JDK Linuksa
Reimeus

Chociaż jest to właściwa odpowiedź dla wielu, niektóre systemy operacyjne nie zapewniają tego pakietu. Dla tych, którzy nie mają instalatora webupd8 PPAUbuntu i fedypulpitu dla Fedory, są dwa szybkie sposoby konfiguracji najnowszego Oracle JDK / JRE, który zawiera JavaFX.
tresf

3
W przypadku Ubuntu 18.04 nadal zależy to od Javy 8, ale domyślną jest java 10. Jeśli ją zainstalujesz, otrzymasz 2 javas.
jgomo3

Zgodnie z Jak zainstalować openjfx wraz z openjdk-11? dla wersji Java 11+, aby używać JavaFX zamiast apt-get install openjfx(które obecnie działa tylko dla Java 8), możesz użyć instrukcji z witryny internetowej openjfx.io , gdzie JavaFX jest „dostępny jako zestaw SDK dla konkretnej platformy, jako liczba jmods i jako zestaw artefaktów w maven central. ”.
jewelsea

Pakiet Debiana openjfx został wydany dla OpenJDK-11 pod adresem tracker.debian.org/pkg/openjfx , więc być może ta metoda. sudo apt-get install openjfx, będzie nadal obsługiwane i działać w późniejszych wersjach JavaFX i Ubuntu. Zauważ, że pakiety openjfx Debiana nie wydają się być aktualizowane tak często, jak biblioteki dystrybuowane przez openjfx.io, więc jeśli chcesz używać najnowszej wersji, prawdopodobnie najlepiej będzie, jeśli użyjesz dystrybucji openjfx.io.
jewelsea

11

Szybkim rozwiązaniem jest skopiowanie pliku JAR środowiska wykonawczego JavaFX oraz plików, do których istnieją odwołania z Oracle JRE (JDK) lub dowolnej samodzielnej aplikacji korzystającej z JavaFX (np. 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/

po prostu upewnij się, że masz GTK 2.18 lub nowszy


Nie mogę znaleźć miejsca, w którym openjfx jest zainstalowany w Ubuntu 18.04, ale ukradłem te jary i inne pliki z innego programu zainstalowanego na moim dysku twardym (możesz sprawdzić coś takiego jak phpstorm lub clion :)) i działało jak marzenie. Dziękuję
Heichou

Skopiowałem pliki z JDK1.8.0_251 (Oracle Java 1.8) do java-8-openjdk-amd64 (repozytorium ubuntu OpenJDK 8). Nadal nie mógł uruchomić plików jar za pomocą JavaFX. Ale kiedy po prostu połączyłem się z plikiem jfxrt.jar jako zewnętrzną biblioteką jar w mojej ścieżce kompilacji Eclipse, programy działały w kontekście Eclipse. Uruchomienie „apt-cache policy libgtk2.0-0” dało „Installed: 2.24.32-1ubuntu1”
Phil Freihofner

7

Odpowiadając również na to pytanie:

Gdzie mogę uzyskać gotowe biblioteki JavaFX dla OpenJDK (Windows)

W systemie Linux nie jest to tak naprawdę problem, ale w systemie Windows nie jest to takie łatwe, zwłaszcza jeśli chcesz rozpowszechniać środowisko JRE.

W rzeczywistości możesz używać OpenJFX z OpenJDK 8 w systemie Windows, po prostu musisz go samodzielnie złożyć:

Pobierz OpenJDK stąd: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Pobierz OpenJFX stąd: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

skopiuj wszystkie pliki z zip OpenFX na górze JDK, voila, masz OpenJDK z JavaFX.

Aktualizacja :

Na szczęście od Azul jest teraz dostępna kompilacja OpenJDK + OpenJFX, którą można pobrać na stronie ich społeczności: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx


dzięki. Sprawdziłem witrynę github AdoptOpenJDK, ale jest tam napisane „repozytorium starszego typu”. Czy wiesz, gdzie jest dostępny nowszy pasujący plik binarny OpenJFX pasujący do kompilacji nowego repozytorium github.com/AdoptOpenJDK/openjdk8-binaries/releases ?
Houtman,

3

Spróbuj obuildfactory .

Istnieje potrzeba zmodyfikowania tych skryptów (zawierają błędy i nie robią dokładnie tego, co jest wymagane), w ciągu najbliższych kilku dni wgram skrypty rozwidlone z obuildfactory. dlatego też odpowiednio zaktualizuję moją odpowiedź.

Do tego czasu życzę miłego pana :)


1
niestety nie ma odpowiednika OpenJFX dla Windowsa
madduci

0

Według Oracle integracja OpenJDK i javaFX nastąpi w pierwszym kwartale 2014 r. (Patrz mapa drogowa: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Tak więc na pierwsze pytanie odpowiedź brzmi: musisz poczekać do tego czasu. W przypadku drugiego pytania nie ma innego wyjścia. Więc na razie przejdź do java swing lub uruchom javaFX i czekaj


link w Twojej odpowiedzi jest uszkodzony.
Ostatnią

@ ILMostro_7 link w twoim komentarzu jest uszkodzony
Blake

Jest wystarczająco stary. Jestem pewien, że zmieniają swoją witrynę, gdy kształtują się nowe plany.
ILMostro_7

Poniższa witryna wskazuje, że javafx będzie samodzielną biblioteką zaczynającą się od java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.