JavaFX dan OpenJDK

109

Saya mencoba memutuskan apakah saya dapat beralih ke JavaFX untuk antarmuka pengguna aplikasi Java saya. Sebagian besar pengguna saya akan menggunakan Oracle JRE, yang telah terintegrasi JavaFX hari ini. Namun, ada juga yang menggunakan OpenJDK (di linux). Ini (lama) pertanyaan menunjukkan bahwa OpenJDK Penawaran sangat buruk dengan JavaFX. Menurut pertanyaan ini , OpenJFX alternatif hanya akan diintegrasikan sepenuhnya ke dalam OpenJDK di versi 9. Jadi pertanyaan saya ada dua:

  • Apakah dukungan JavaFX di OpenJDK masih sangat buruk?
  • Jika ya, apakah ada distribusi Linux yang sudah menawarkan paket OpenJFX sehingga pengguna tidak perlu membuatnya sendiri ?
mdriesen.dll
sumber
Apa mode eksekusi aplikasi Anda (bagaimana itu diterapkan?)
permataSea
@jewelsea Ini berjalan sebagai program mandiri.
mdriesen
@docM apakah itu solusi untuk beralih ke oracle- (sun) -jdk untuk mesin ubuntu? webupd8.org/2012/01/…
nyyrikki
@nyyrikki Itu adalah opsi. Tapi saya lebih suka tetap menggunakan Java Swing jika JavaFX dan OpenJDK tidak bisa digabungkan.
mdriesen
2
@Yngve Saya memindahkan semuanya ke JavaFX ketika Ubuntu dan Debian mulai menyertakan paket.
mdriesen

Jawaban:

99

JavaFX adalah bagian dari OpenJDK

Proyek JavaFX sendiri adalah open source dan merupakan bagian dari proyek OpenJDK .

Perbarui Des 2019

Untuk informasi terkini tentang cara menggunakan Open Source JavaFX, kunjungi https://openjfx.io . Ini termasuk instruksi tentang penggunaan JavaFX sebagai pustaka modular yang diakses dari JDK yang ada (seperti instalasi Open JDK ).

Repositori kode sumber terbuka untuk JavaFX ada di https://github.com/openjdk/jfx .

Di lokasi sumber yang ditautkan, Anda dapat menemukan file lisensi untuk JavaFX terbuka (saat ini lisensi ini cocok dengan lisensi untuk OpenJDK: pengecualian jalur kelas GPL +).

Wiki untuk proyek ini terletak di: https://wiki.openjdk.java.net/display/OpenJFX/Main

Jika Anda ingin mulai cepat menggunakan JavaFX terbuka, distribusi Belsoft Liberica JDK menyediakan binari OpenJDK yang sudah dibuat sebelumnya yang (saat ini) menyertakan JavaFX terbuka untuk berbagai platform.

Untuk distribusi sebagai aplikasi mandiri, Java 14 dijadwalkan untuk mengimplementasikan JEP 343: Alat Pengemasan , yang "Mendukung format pengemasan asli untuk memberikan pengalaman penginstalan alami kepada pengguna akhir. Format ini mencakup msi dan exe di Windows, pkg dan dmg di macOS , serta deb dan rpm di Linux. ", untuk penerapan aplikasi berbasis OpenJFX dengan penginstal asli dan tanpa ketergantungan platform tambahan (seperti JDK yang telah diinstal sebelumnya).


Informasi lama yang mungkin menjadi usang seiring waktu

Membangun JavaFX dari repositori OpenJDK

Anda dapat membangun OpenJDK versi terbuka (termasuk JavaFX) sepenuhnya dari sumber yang tidak memiliki ketergantungan pada Oracle JDK atau kode sumber tertutup.

Pembaruan: Menggunakan distribusi JavaFX yang dibuat sebelumnya dari sumber OpenJDK

Sebagaimana dicatat dalam komentar untuk pertanyaan ini dan dalam jawaban lain, distribusi Debian Linux menawarkan distribusi biner JavaFX berdasarkan OpenJDK:

(Saat ini ini hanya berfungsi untuk Java 8 sejauh yang saya tahu).

Perbedaan antara Open JDK dan Oracle JDK sehubungan dengan JavaFX

Informasi berikut disediakan untuk Java 8. Mulai Java 9, pengkodean VP6 tidak digunakan lagi untuk JavaFX dan teknologi penerapan aplikasi tertanam Oracle WebStart / Browser juga tidak digunakan lagi . Jadi, versi JavaFX yang akan datang, meskipun didistribusikan oleh Oracle, kemungkinan besar tidak akan menyertakan teknologi apa pun yang bukan open source.

Oracle JDK menyertakan beberapa perangkat lunak yang tidak dapat digunakan dari OpenJDK. Ada dua komponen utama yang terkait dengan JavaFX.

  1. Codec video ON2 VP6, yang dimiliki oleh Google dan Google tidak bersumber terbuka.
  2. Teknologi penyebaran aplikasi Oracle WebStart / Browser Embedded.

Ini berarti bahwa versi terbuka JavaFX tidak dapat memutar file FLV VP6. Ini bukan kerugian besar karena sulit untuk menemukan encoder VP6 atau media yang dikodekan dalam VP6.

Format video lain yang lebih umum, seperti H.264 akan diputar ulang dengan baik dengan versi terbuka JavaFX (selama Anda memiliki codec yang sesuai yang telah diinstal sebelumnya pada mesin target).

Kurangnya teknologi penyebaran WebStart / Browser Embedded benar-benar ada hubungannya dengan OpenJDK itu sendiri daripada JavaFX secara khusus. Teknologi ini dapat digunakan untuk menyebarkan aplikasi non-JavaFX.

Akan sangat bagus jika komunitas OpenSource mengembangkan teknologi penyebaran untuk Java (dan perangkat lunak lain) yang sepenuhnya menggantikan metode penyebaran WebStart dan Browser Embedded, memungkinkan pengalaman pengguna yang ringan dan berdampak rendah untuk distribusi aplikasi. Saya yakin telah ada beberapa proyek yang mulai memenuhi tujuan seperti itu, tetapi mereka belum mencapai tingkat kematangan dan adopsi yang tinggi.

Secara pribadi, saya merasa bahwa penerapan WebStart / Browser Embedded adalah teknologi lama dan saat ini ada cara yang lebih baik untuk menyebarkan banyak aplikasi JavaFX (seperti aplikasi mandiri).

Perbarui Des, 2019:

Versi open source WebStart untuk JDK 11+ telah dikembangkan dan tersedia di https://openwebstart.com .

Siapa yang perlu membuat Distribusi OpenJDK Linux yang menyertakan JavaFX

Terserah orang-orang yang membuat paket untuk distribusi Linux berdasarkan OpenJDK (misalnya Redhat, Ubuntu dll) untuk membuat RPM untuk JDK dan JRE yang menyertakan JavaFX. Distributor perangkat lunak tersebut, kemudian perlu menempatkan paket yang dihasilkan dalam repositori kode distribusi standar mereka (misalnya, repositori yum jaringan fedora / red hat). Saat ini hal ini belum dilakukan, tetapi saya akan sangat terkejut jika paket Java 8 Linux tidak menyertakan JavaFX saat Java 8 dirilis pada Maret 2014.

Pembaruan, Des 2019 :

Sekarang JavaFX telah dipisahkan dari sebagian besar distribusi biner JDK dan JRE (termasuk distribusi Oracle) dan, sebagai gantinya, tersedia sebagai SDK yang berdiri sendiri, kumpulan jmods atau sebagai dependensi pustaka yang tersedia dari repositori Maven pusat (seperti yang dijelaskan sebagai https://openjfx.io ), ada sedikit kebutuhan akan distribusi Linux OpenJDK standar untuk menyertakan JavaFX.

Jika Anda menginginkan JDK pra-bangun yang menyertakan JavaFX, pertimbangkan distribusi Liberica JDK , yang disediakan untuk berbagai platform.

Nasihat tentang Penerapan untuk Aplikasi Substansial

Saya menyarankan menggunakan mode penerapan aplikasi mandiri Java .

Penjelasan tentang mode penerapan ini adalah:

Aplikasi diinstal di drive lokal dan dijalankan sebagai program mandiri menggunakan salinan pribadi runtime Java dan JavaFX. Aplikasi dapat diluncurkan dengan cara yang sama seperti aplikasi asli lainnya untuk sistem operasi tersebut, misalnya menggunakan pintasan desktop atau entri menu.

Anda dapat membuat aplikasi mandiri baik dari distribusi Oracle JDK atau dari build OpenJDK yang menyertakan JavaFX. Saat ini lebih mudah untuk melakukannya dengan Oracle JDK.

Karena versi Java dipaketkan dengan aplikasi Anda, Anda tidak perlu peduli tentang versi Java apa yang mungkin telah diinstal sebelumnya pada mesin, kemampuan apa yang dimilikinya, dan apakah kompatibel dengan program Anda atau tidak. Sebagai gantinya, Anda dapat menguji aplikasi Anda terhadap versi runtime Java yang tepat, dan mendistribusikannya bersama aplikasi Anda. Pengalaman pengguna untuk menerapkan aplikasi Anda akan sama dengan menginstal aplikasi asli pada mesin mereka (misalnya, menginstal windows .exe atau .msi, OS X .dmg, linux .rpm atau .deb).

Catatan: Fitur aplikasi mandiri hanya tersedia untuk Java 8 dan 9, bukan untuk Java 10-13. Java 14, melalui JEP 343: Packaging Tool , dijadwalkan kembali memberikan dukungan untuk fitur ini dari distribusi OpenJDK.

Pembaruan, April 2018: Informasi tentang kebijakan Oracle saat ini terhadap perkembangan di masa mendatang

permata laut
sumber
@Emmanuel, Terima kasih atas pekerjaan Anda dalam hal ini. JavaFX adalah bagian dari JDK, jadi (setidaknya hingga JDK menjadi termodulasi) Saya tidak yakin mengapa akan ada paket OpenJFX terpisah daripada menyertakan semua file runtime yang diperlukan dalam paket OpenJDK standar (seperti yang dilakukan dengan Distribusi Oracle JDK). The open-JFX milis akan menjadi tempat yang baik jika diskusi lebih lanjut diperlukan.
Jewelsea
Paket terpisah memberikan tingkat fleksibilitas jika seseorang tertarik dengan JDK tetapi tidak tertarik pada JavaFX. Bukankah modularisasi merupakan tujuan untuk Java 9? :)
Emmanuel Bourg
11
"Saat ini hal ini tidak dilakukan, tetapi saya akan sangat terkejut jika paket Java 8 Linux tidak menyertakan JavaFX saat Java 8 dirilis pada Maret 2014". Anda pasti terkejut karena OpenJDK 8 tidak menyertakan OpenJFX.
2
Arch Linux juga memiliki paket untuk openjfx: archlinux.org/packages/?name=java-openjfx
Maciek Łoziński
2
@NoBugs Ini mungkin respons yang sedikit terlambat untuk menjadi berguna, tetapi Ubuntu 14.04 tidak menyertakan OpenJDK 8, itulah sebabnya Anda tidak dapat menemukan paket JFX yang sesuai. Saya tidak ingat rilis Ubuntu mana yang memperkenalkannya, tetapi sudah pasti tersedia di Ubuntu 16.04 - bersama dengan paket "openjfx".
Mike Allen
50

Bagi saya ini berhasil.

$ sudo apt-get install openjfx
Vineel Kovvuri
sumber
3
Mungkin cara termudah untuk menambahkan JavaFX ke Linux JDK Anda
Reimeus
Meskipun ini adalah jawaban yang tepat bagi banyak orang, beberapa OS tidak menyediakan paket ini. Bagi mereka yang tidak webupd8 PPAmenyukai Ubuntu dan fedypenginstal desktop untuk Fedora adalah dua cara cepat untuk mengatur Oracle JDK / JRE terbaru yang menyertakan JavaFX.
tresf
3
Untuk Ubuntu 18.04, ini masih bergantung pada Java 8, tetapi yang default adalah java 10. Jika Anda menginstalnya, Anda akan mendapatkan 2 javas.
jgomo3
Menurut Bagaimana cara menginstal openjfx bersama dengan openjdk-11? , untuk Java versi 11+, untuk menggunakan JavaFX, daripada apt-get install openjfx(yang saat ini hanya berfungsi untuk Java 8), Anda dapat menggunakan petunjuk dari situs web openjfx.io , di mana JavaFX "tersedia sebagai SDK khusus platform, sebagai nomor dari jmods, dan sebagai satu set artefak di pusat maven. ".
Jewelsea
Paket openjfx Debian telah dirilis untuk OpenJDK-11 di tracker.debian.org/pkg/openjfx , jadi mungkin metode ini. sudo apt-get install openjfx, akan terus didukung dan berfungsi untuk rilis JavaFX dan ubuntu nanti. Perhatikan bahwa paket openjfx Debian tampaknya tidak diperbarui sesering perpustakaan yang didistribusikan oleh openjfx.io, jadi jika Anda ingin menggunakan versi terbaru, Anda mungkin lebih baik menggunakan distribusi openjfx.io.
Jewelsea
11

Sebagai solusi cepat, Anda dapat menyalin file JAR runtime JavaFX dan yang direferensikan dari Oracle JRE (JDK) atau aplikasi mandiri apa pun yang menggunakan JavaFX (misalnya, 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/

hanya pastikan Anda memiliki gtk yang 2,18 atau lebih tinggi

Максим Шатов
sumber
Saya tidak dapat menemukan di mana openjfx diinstal di Ubuntu 18.04, tetapi saya mencuri toples ini dan file lain dari program lain yang diinstal di hard disk saya (Anda dapat memeriksa sesuatu seperti phpstorm atau clion :)) dan itu bekerja seperti pesona. Terima kasih
Heichou
Saya menyalin file dari JDK1.8.0_251 (Oracle Java 1.8) ke java-8-openjdk-amd64 (ubuntu repositori OpenJDK 8). Masih tidak dapat menjalankan file jar dengan JavaFX. Tetapi ketika saya hanya menautkan ke jfxrt.jar sebagai jar perpustakaan eksternal di jalur pembuatan Eclipse saya, program memang berjalan dalam konteks Eclipse. Menjalankan "apt-cache policy libgtk2.0-0" menghasilkan "Installed: 2.24.32-1ubuntu1"
Phil Freihofner
7

Juga menjawab pertanyaan ini:

Di mana saya bisa mendapatkan pustaka JavaFX bawaan untuk OpenJDK (Windows)

Di Linux sebenarnya tidak menjadi masalah, tetapi di Windows tidak semudah itu, terutama jika Anda ingin mendistribusikan JRE.

Anda sebenarnya dapat menggunakan OpenJFX dengan OpenJDK 8 di windows, Anda hanya perlu merakitnya sendiri:

Unduh OpenJDK dari sini: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Unduh OpenJFX dari sini: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

salin semua file dari zip OpenFX di atas JDK, voila, Anda memiliki OpenJDK dengan JavaFX.

Pembaruan :

Untungnya dari Azul sekarang ada build OpenJDK + OpenJFX yang dapat diunduh di halaman komunitas mereka: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx

Mauli
sumber
Terima kasih. Saya memeriksa situs github AdoptOpenJDK tetapi dikatakan "repositori lama". Apakah Anda tahu di mana OpenJFX-biner baru yang cocok tersedia yang cocok dengan build repo baru github.com/AdoptOpenJDK/openjdk8-binaries/releases ?
Houtman
3

Coba obuildfactory .

Ada kebutuhan untuk mengubah skrip ini (mengandung kesalahan dan tidak benar-benar melakukan "hal" yang diperlukan), saya akan mengunggah skrip saya yang bercabang dari obuildfactory dalam beberapa hari ke depan. dan jadi saya juga akan memperbarui jawaban saya sesuai.

Sampai jumpa lagi pak :)

DeepSidhu1313
sumber
1
sayangnya tidak ada mitra Windows untuk OpenJFX
madduci
0

Menurut integrasi Oracle OpenJDK & javaFX akan dilakukan pada Q1-2014 (lihat peta jalan: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Jadi, untuk pertanyaan pertama jawabannya adalah Anda harus menunggu sampai saat itu. Untuk pertanyaan ke-2 tidak ada cara lain. Jadi, untuk saat ini gunakan java swing atau mulai javaFX dan tunggu

Stathis Andronikos
sumber
tautan di jawaban Anda rusak. Hal penutup saya datang ke halaman serupa adalah oracle.com/us/corporate/press/1854982
ILMostro_7
@ ILMostro_7 tautan di komentar Anda rusak
Blake
Sudah cukup tua. Saya yakin mereka mengubah situs mereka saat rencana baru mulai terbentuk.
ILMostro_7
Situs berikut menunjukkan bahwa javafx akan menjadi pustaka mandiri yang dimulai dengan java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7