JavaFX ve OpenJDK


109

Java uygulamamın kullanıcı arayüzü için JavaFX'e geçip geçemeyeceğime karar vermeye çalışıyorum. Kullanıcılarımın çoğu bugünlerde JavaFX'in entegre edildiği Oracle JRE'yi kullanıyor olacak. Ancak, bazıları OpenJDK (linux üzerinde) kullanıyor. Bu (eski) soru, OpenJDK'nin JavaFX ile çok kötü bir şekilde uğraştığını gösteriyor. Bu soruya göre , alternatif OpenJFX yalnızca 9. sürümde OpenJDK'ye tam olarak entegre edilecek. Yani sorum iki yönlü:

  • OpenJDK'deki JavaFX desteği hala çok mu kötü?
  • Öyleyse, zaten bir OpenJFX paketi sunan herhangi bir Linux dağıtımı var mı, böylece kullanıcılar onu kendileri oluşturmak zorunda kalmayacaklar mı?

Uygulamanızın yürütme modu nedir (nasıl dağıtılır?)
jewelsea

@jewelsea Bağımsız bir program olarak çalışır.
mdriesen

@docM ubuntu makineleri için oracle- (sun) -jdk'ye geçmek bir çözüm olur mu? webupd8.org/2012/01/…
nyyrikki

@nyyrikki Bu bir seçenektir. Ancak JavaFX ve OpenJDK karışmazsa Java Swing'i tercih ederim.
mdriesen

2
@Yngve Ubuntu ve Debian paketleri dahil etmeye başladığında her şeyi JavaFX'e taşıdım.
mdriesen

Yanıtlar:


99

JavaFX, OpenJDK'nin bir parçasıdır

JavaFX projesinin kendisi açık kaynaklıdır ve OpenJDK projesinin bir parçasıdır .

Aralık 2019 Güncellemesi

Açık Kaynak JavaFX'in nasıl kullanılacağına ilişkin güncel bilgiler için https://openjfx.io adresini ziyaret edin . Bu, JavaFX'i mevcut bir JDK'dan ( Open JDK kurulumu gibi ) erişilen modüler bir kitaplık olarak kullanma talimatlarını içerir .

JavaFX için açık kaynak kod deposu https://github.com/openjdk/jfx adresindedir .

Bağlantılı kaynak yerde, sen (şu anda bu açık JavaFX için lisans dosyaları bulabilirsiniz lisans : GPL + sınıf yolu istisna OpenJDK için lisans eşleşir).

Proje için wiki şu adreste bulunur: https://wiki.openjdk.java.net/display/OpenJFX/Main

Açık JavaFX kullanmaya hızlı bir başlangıç ​​yapmak istiyorsanız, Belsoft Liberica JDK dağıtımları, çeşitli platformlar için (şu anda) açık JavaFX içeren önceden oluşturulmuş OpenJDK ikili dosyaları sağlar.

Bağımsız uygulamalar olarak dağıtım için Java 14'ün, "Son kullanıcılara doğal bir yükleme deneyimi sunmak için yerel paketleme biçimlerini destekleyen" JEP 343: Packaging Tool'u uygulaması planlanmıştır . Bu biçimler, Windows'ta msi ve exe, macOS'ta pkg ve dmg'yi içerir. ve Linux'ta deb ve rpm. ", OpenJFX tabanlı uygulamaların yerel yükleyicilerle ve ek platform bağımlılıkları (önceden yüklenmiş JDK gibi) dağıtımı için.


Zaman içinde geçerliliğini yitirebilecek eski bilgiler

OpenJDK deposundan JavaFX oluşturma

Bir inşa edebilirsiniz (JavaFX dahil) OpenJDK açık versiyonunu tamamen Oracle JDK veya kapalı kaynak kodu bağımlılıkları yoktur kaynaktan.

Güncelleme: OpenJDK kaynaklarından önceden oluşturulmuş bir JavaFX dağıtımı kullanma

Bu soruya yapılan yorumlarda ve başka bir yanıtta belirtildiği gibi, Debian Linux dağıtımları OpenJDK'ye dayalı bir JavaFX ikili dağıtımı sunar:

(şu anda bu yalnızca bildiğim kadarıyla Java 8 için çalışıyor).

JavaFX'e göre Open JDK ve Oracle JDK arasındaki farklar

Aşağıdaki bilgiler Java 8 için sağlanmıştır. Java 9 itibarıyla, VP6 kodlaması JavaFX için kullanımdan kaldırılmıştır ve Oracle WebStart / Browser gömülü uygulama konuşlandırma teknolojisi de kullanımdan kaldırılmıştır . Dolayısıyla, JavaFX'in gelecekteki sürümleri, Oracle tarafından dağıtılsalar bile, muhtemelen açık kaynak olmayan herhangi bir teknolojiyi içermeyecektir.

Oracle JDK, OpenJDK'den kullanılamayan bazı yazılımlar içerir. JavaFX ile ilgili iki ana bileşen vardır.

  1. Google'ın ve Google'ın sahip olduğu ON2 VP6 video codec'i açık kaynaklı değildir.
  2. Oracle WebStart / Browser Embedded uygulama dağıtım teknolojisi.

Bu, JavaFX'in açık bir sürümünün VP6 FLV dosyalarını oynatamayacağı anlamına gelir. VP6 kodlayıcıları veya VP6'da kodlanmış ortamları bulmak zor olduğundan bu büyük bir kayıp değildir.

H.264 gibi diğer daha yaygın video formatları, JavaFX'in açık bir sürümüyle iyi oynatılır (hedef makineye önceden yüklenmiş uygun kodeklere sahip olduğunuz sürece).

WebStart / Browser Embedded dağıtım teknolojisinin eksikliği, özellikle JavaFX'ten ziyade OpenJDK'nın kendisiyle ilgili bir şeydir. Bu teknoloji, JavaFX dışı uygulamaları dağıtmak için kullanılabilir.

OpenSource topluluğu Java (ve diğer yazılımlar) için WebStart ve Browser Embedded dağıtım yöntemlerinin yerini alan ve uygulama dağıtımı için hoş, hafif, düşük etkili bir kullanıcı deneyimine izin veren bir dağıtım teknolojisi geliştirirse harika olurdu. Böyle bir amaca hizmet etmeye başlayan bazı projeler olduğuna inanıyorum, ancak henüz yüksek bir olgunluk ve benimseme düzeyine ulaşmadılar.

Kişisel olarak, WebStart / Browser Embedded dağıtımlarının eski teknoloji olduğunu ve şu anda birçok JavaFX uygulamasını (kendi kendine yeten uygulamalar gibi) dağıtmanın daha iyi yolları olduğunu düşünüyorum.

Aralık 2019 güncellemesi:

JDK 11+ için WebStart'ın açık kaynaklı bir sürümü geliştirilmiştir ve https://openwebstart.com adresinde mevcuttur .

JavaFX içeren Linux OpenJDK Dağıtımlarını kimin oluşturması gerekir?

JavaFX içeren JDK ve JRE için RPM'ler oluşturmak, OpenJDK'ye (örneğin Redhat, Ubuntu vb.) Dayalı Linux dağıtımları için paketler oluşturan kişilere kalmıştır. Bu yazılım dağıtıcılarının, daha sonra üretilen paketleri standart dağıtım kodu depolarına (örneğin, fedora / red hat ağı yum depolarına) yerleştirmeleri gerekir. Şu anda bu yapılmıyor, ancak Mart 2014'te Java 8 piyasaya sürüldüğünde Java 8 Linux paketleri JavaFX içermeseydi oldukça şaşırırdım.

Güncelleme, Aralık 2019 :

Artık JavaFX, çoğu ikili JDK ve JRE dağıtımından (Oracle'ın dağıtımı dahil) ayrıldığından ve bunun yerine, bağımsız bir SDK, jmod kümesi olarak veya merkezi Maven deposundan erişilebilen bir kitaplık bağımlılıkları olarak kullanılabilir (şu şekilde özetlenmiştir) https://openjfx.io ), standart Linux OpenJDK dağıtımlarının JavaFX'i içermesine daha az ihtiyaç vardır.

JavaFX içeren önceden oluşturulmuş bir JDK istiyorsanız , çeşitli platformlar için sağlanan Liberica JDK dağıtımlarını düşünün .

Önemli Uygulamalar için Dağıtım Önerileri

Java'nın kendi kendine yeten uygulama dağıtım modunu kullanmanızı öneririm .

Bu dağıtım modunun açıklaması şöyledir:

Uygulama yerel sürücüye yüklenir ve Java ve JavaFX çalışma zamanlarının özel bir kopyasını kullanan bağımsız bir program olarak çalışır. Uygulama, bu işletim sistemi için diğer yerel uygulamalarla aynı şekilde başlatılabilir, örneğin bir masaüstü kısayolu veya menü girişi kullanılarak.

Oracle JDK dağıtımından veya JavaFX içeren bir OpenJDK yapısından bağımsız bir uygulama oluşturabilirsiniz. Şu anda Oracle JDK ile bunu yapmak daha kolay.

Java'nın bir sürümü uygulamanızla birlikte paketlendiğinden, makineye önceden yüklenmiş Java sürümünün, hangi yeteneklere sahip olduğunun ve programınızla uyumlu olup olmadığı konusunda endişelenmenize gerek yoktur. Bunun yerine, uygulamanızı tam bir Java çalışma zamanı sürümüne karşı test edebilir ve bunu uygulamanızla dağıtabilirsiniz. Uygulamanızı dağıtmak için kullanıcı deneyimi, makinelerine yerel bir uygulama yüklemekle aynı olacaktır (örneğin, bir windows .exe veya .msi, bir OS X .dmg, bir linux .rpm veya .deb).

Not: Bağımsız uygulama özelliği yalnızca Java 8 ve 9 için mevcuttu, Java 10-13 için mevcut değildi. Java 14, JEP 343 aracılığıyla : Paketleme Aracı , OpenJDK dağıtımlarından bu özellik için yeniden destek sağlamak üzere planlanmıştır.

Güncelleme, Nisan 2018: Oracle'ın gelecekteki gelişmelere yönelik mevcut politikası hakkında bilgiler


@Emmanuel, bu konudaki çalışmanız için teşekkürler. JavaFX, JDK'nın bir parçasıdır, bu nedenle (en azından JDK modüler hale gelene kadar), gerekli tüm çalışma zamanı dosyalarını standart OpenJDK paketine dahil etmek yerine neden ayrı bir OpenJFX paketi olacağını bilmiyorum ( Oracle JDK dağıtımları). Açık JFX posta listesi ayrıca tartışma gerekiyorsa iyi bir yer olurdu.
jewelsea

Ayrı bir paket, birisi JDK ile ilgileniyor ancak JavaFX ile ilgilenmiyorsa bir derece esneklik sağlar. Sonuçta modülerleştirme Java 9 için bir hedef değil mi? :)
Emmanuel Bourg

11
"Şu anda bu yapılmamaktadır, ancak Java 8 Linux paketleri, Java 8 Mart 2014'te piyasaya sürüldüğünde JavaFX içermeseydi çok şaşırırdım". OpenJDK 8 OpenJFX içermediği için şaşırmalısınız.

2
Arch Linux ayrıca openjfx için paketlere de sahiptir: archlinux.org/packages/?name=java-openjfx
Maciek

2
@NoBugs Bu, yararlı bir yanıt için biraz geç olabilir, ancak Ubuntu 14.04 OpenJDK 8'i içermiyor, bu yüzden ilgili JFX paketini bulamıyorsunuz. Hangi Ubuntu sürümünün onu tanıttığını hatırlayamıyorum, ancak kesinlikle Ubuntu 16.04'te - "openjfx" paketi ile birlikte.
Mike Allen

50

Benim için bu işe yaradı.

$ sudo apt-get install openjfx

3
Muhtemelen JavaFX'i Linux
JDK'nıza

Çoğu kişi için doğru cevap bu olsa da, bazı işletim sistemleri bu paketi sağlamaz. webupd8 PPAUbuntu için olmayanlar ve fedyFedora için masaüstü yükleyici, JavaFX içeren en yeni Oracle JDK / JRE'yi kurmanın iki hızlı yoludur.
tresf

3
Ubuntu 18.04 için, yine de Java 8'e bağlıdır, ancak varsayılanı java 10'dur. Eğer yüklerseniz, 2 javas ile sonlanırsınız.
jgomo3

Göre How OpenJDK-11 ile birlikte openjfx yüklemek için? , Java 11+ sürümleri için apt-get install openjfx(şu anda yalnızca Java 8 için çalışmaktadır) yerine JavaFX kullanmak için , JavaFX'in "platforma özel bir SDK olarak mevcut olduğu openjfx.io web sitesindeki talimatları kullanabilirsiniz. Jmods ve maven merkezinde bir dizi eser olarak. "
jewelsea

Bir Debian openjfx paketi OpenJDK-11, için piyasaya sürülmüştür tracker.debian.org/pkg/openjfx belkide, bu yöntem. sudo apt-get install openjfx, desteklenmeye ve sonraki JavaFX ve ubuntu sürümleri için çalışmaya devam edecek. Debian openjfx paketlerinin openjfx.io tarafından dağıtılan kütüphaneler kadar sık ​​güncellenmediğine dikkat edin, bu nedenle en güncel sürümü kullanmak istiyorsanız, muhtemelen en iyi openjfx.io dağıtımını kullanmalısınız.
jewelsea

11

Hızlı bir çözüm olarak, JavaFX çalışma zamanı JAR dosyasını ve Oracle JRE'den (JDK) referans verilenleri veya JavaFX kullanan herhangi bir bağımsız uygulamadan (örneğin JavaFX Scene Builder 2.0 ) kopyalayabilirsiniz :

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/

sadece gtk 2.18 veya sonraki bir sürüme sahip olduğunuzdan emin olun


Ubuntu 18.04'te openjfx'in nerede kurulu olduğunu bulamıyorum, ancak bu kavanozları ve diğer dosyaları sabit diskime yüklü başka bir programdan çaldım (phpstorm veya clion gibi bir şeyi kontrol edebilirsiniz :)) ve bir cazibe gibi çalıştı. Teşekkürler
Heichou

Dosyaları JDK1.8.0_251'den (Oracle Java 1.8) java-8-openjdk-amd64'e (ubuntu deposu OpenJDK 8) kopyaladım. JavaFX ile jar dosyalarını hala çalıştıramadı. Ancak Eclipse derleme yolumda jfxrt.jar dosyasını harici bir kitaplık kavanozu olarak bağladığımda, programlar Eclipse bağlamında çalışıyordu. "Apt-cache policy libgtk2.0-0" çalıştırıldığında "Yüklendi: 2.24.32-1ubuntu1"
Phil Freihofner

7

Ayrıca bu soruyu cevaplamak:

OpenJDK (Windows) için önceden oluşturulmuş JavaFX kitaplıklarını nereden edinebilirim

Linux'ta bu gerçekten bir sorun değil, ancak Windows'ta o kadar kolay değil, özellikle de JRE'yi dağıtmak istiyorsanız.

OpenJFX'i OpenJDK 8 ile pencerelerde kullanabilirsiniz, sadece kendiniz bir araya getirmelisiniz:

OpenJDK'yi buradan indirin: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

OpenJFX'i buradan indirin: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

JDK'nın üstündeki OpenFX zipinden tüm dosyaları kopyalayın, işte, JavaFX ile bir OpenJDK'niz var.

Güncelleme :

Neyse ki Azul'dan artık topluluk sayfalarından indirilebilecek bir OpenJDK + OpenJFX yapısı var: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx


Teşekkürler. AdoptOpenJDK github sitesini kontrol ettim ama "eski depo" yazıyor. Yeni deponun github.com/AdoptOpenJDK/openjdk8-binaries/releases yapılarıyla eşleşen daha yeni bir OpenJFX ikili dosyasının nerede mevcut olduğunu biliyor musunuz ?
Houtman

3

Bir fabrikayı dene .

Bu betikleri değiştirmeye ihtiyaç var (hata içeriyor ve "gereken şeyi" tam olarak yapmayın), önümüzdeki birkaç gün içinde obuildfactory'den çatallanmış maden betiklerini yükleyeceğim. ve bu yüzden cevabımı buna göre güncelleyeceğim.

O zamana kadar keyfini çıkarın efendim :)


1
maalesef OpenJFX için Windows muadili yok
madduci

0

Oracle'a göre OpenJDK & javaFX entegrasyonu Q1-2014'te olacak (yol haritasına bakın: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Yani, ilk soru için cevap o zamana kadar beklemeniz gerektiğidir. 2. soru için başka yol yok. Şimdilik java swing ile gidin veya javaFX'i başlatın ve bekleyin


cevabınızdaki bağlantı bozuk. Benzer bir sayfaya
geldiğim kapanış

@ ILMostro_7 yorumunuzdaki bağlantı kesildi
Blake

Yeterince yaşlı. Yeni planlar şekillenirken sitelerini değiştirdiklerinden eminim.
ILMostro_7

Aşağıdaki site, javafx'in java-11 ile başlayan bağımsız bir kitaplık olacağını belirtir. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.