JavaFXとOpenJDK


109

JavaアプリケーションのユーザーインターフェイスをJavaFXに切り替えることができるかどうかを判断しようとしています。私のユーザーのほとんどは、最近JavaFXが統合されているOracle JREを使用しています。ただし、一部はOpenJDK(Linux)を使用しています。この(古い)質問は、OpenJDKがJavaFXを非常にうまく処理していないことを示唆しています。この質問によると、代替OpenJFXはバージョン9のOpenJDKに完全に統合されるだけです。したがって、私の質問は2つあります。

  • OpenJDKでのJavaFXサポートはまだそれほど悪いのですか?
  • もしそうなら、ユーザーが自分でビルドする必要がないようにOpenJFXパッケージをすでに提供しているLinuxディストリビューションはありますか?

アプリケーションの実行モードは何ですか(アプリケーションはどのようにデプロイされますか?)
jewelsea 2013

@jewelseaスタンドアロンプ​​ログラムとして実行されます。
mdriesen 2013

@docMは、ubuntuマシンをoracle-(sun)-jdkに切り替えるソリューションですか?webupd8.org/2012/01/...
nyyrikki

@nyyrikkiそれはオプションです。ただし、JavaFXとOpenJDKが混在しない場合は、Java Swingを使用したいと思います。
mdriesen 2013

2
@Yngve私は、UbuntuとDebianがパッケージを含め始めたときにすべてをJavaFXに移植しました。
mdriesen

回答:


99

JavaFXはOpenJDKの一部です

JavaFXプロジェクト自体はオープンソースであり、OpenJDKプロジェクトの一部です

2019年12月の更新

オープンソースJavaFXの使用方法に関する最新情報については、https: //openjfx.ioにアクセスしてください。これには、既存のJDK(Open JDKインストールなど)からアクセスされるモジュールライブラリとしてJavaFXを使用する手順が含まれます

JavaFXのオープンソースコードリポジトリはhttps://github.com/openjdk/jfxにあります

リンクされたソースの場所で、オープンJavaFXのライセンスファイルを見つけることができます(現在、このライセンスはOpenJDKのライセンスと一致しています:GPL + classpath例外)。

プロジェクトのwikiは次の場所にあります:https : //wiki.openjdk.java.net/display/OpenJFX/Main

オープンJavaFXの使用をすぐに開始したい場合は、Belsoft Liberica JDKディストリビューションが、さまざまなプラットフォーム用のオープンJavaFXを(現在)含んでいるOpenJDKのビルド済みバイナリを提供します。

自己完結型アプリケーションとして配布する場合、Java 14の実装が予定されています JEP 343:Packaging Tool。これは、「ネイティブパッケージ形式をサポートして、エンドユーザーに自然なインストールエクスペリエンスを提供します。これらの形式には、Windowsではmsiおよびexe、macOSではpkgおよびdmgが含まれます。 、およびLinuxのdebとrpm。」、ネイティブインストーラーを備え、追加のプラットフォームの依存関係(プレインストールされたJDKなど)がないOpenJFXベースのアプリケーションのデプロイメント用。


時間の経過とともに古くなる可能性がある古い情報

OpenJDKリポジトリからのJavaFXの構築

OpenJDKのオープンバージョン(JavaFXを含む)を構築できます。Oracle JDKまたはクローズドソースコードに依存しないソースから完全にます。

更新:OpenJDKソースから事前にビルドされたJavaFXディストリビューションを使用する

この質問へのコメントと別の回答で述べられているように、Debian LinuxディストリビューションはOpenJDKに基づくJavaFXバイナリ配布を提供します。

(現在、これは私の知る限りJava 8でのみ機能します)。

JavaFXに関するOpen JDKとOracle JDKの違い

次の情報はJava 8で提供されました。Java9以降VP6エンコーディングはJavaFX非推奨になり、Oracle WebStart / Browser組み込みアプリケーションデプロイメントテクノロジーも非推奨になりました。。したがって、JavaFXの将来のバージョンには、たとえOracleによって配布されたとしても、オープンソースではないテクノロジは含まれない可能性があります。

Oracle JDKには、OpenJDKから使用できないソフトウェアが含まれています。JavaFXに関連する2つの主要コンポーネントがあります。

  1. GoogleとGoogleが所有するON2 VP6ビデオコーデックはオープンソースではありません。
  2. Oracle WebStart / Browser Embeddedアプリケーションデプロイメントテクノロジー。

つまり、JavaFXのオープンバージョンはVP6 FLVファイルを再生できません。VP6エンコーダーやVP6でエンコードされたメディアを見つけるのは難しいため、これは大きな損失ではありません。

H.264などの他のより一般的なビデオ形式は、JavaFXのオープンバージョンで正常に再生されます(ターゲットマシンに適切なコーデックがプリインストールされている限り)。

WebStart / Browser Embeddedデプロイメントテクノロジーの欠如は、特にJavaFXではなくOpenJDK自体に関係しています。このテクノロジーは、JavaFX以外のアプリケーションのデプロイに使用できます。

オープンソースコミュニティが、Java(およびその他のソフトウェア)のデプロイメントテクノロジーを開発して、WebStartおよびBrowser Embeddedのデプロイメント方法を完全に置き換え、アプリケーションの配布で軽量で影響の少ないユーザーエクスペリエンスを実現できれば、すばらしいと思います。そのような目標を達成するために開始されたプロジェクトがいくつかあると思いますが、それらはまだ高い成熟度と採用レベルに達していません。

個人的には、WebStart / Browser Embeddedのデプロイメントはレガシーテクノロジーであり、現在、多くのJavaFXアプリケーション(自己完結型アプリケーションなど)をデプロイするためのより良い方法があると感じています。

2019年12月の更新:

JDK 11+用のWebStartのオープンソースバージョンが開発され、https: //openwebstart.comから入手できます

JavaFXを含むLinux OpenJDKディストリビューションを作成する必要がある人

JavaFXを含むJDKおよびJREのRPMを作成するのは、OpenJDK(Redhat、Ubuntuなど)に基づいてLinuxディストリビューションのパッケージを作成する人次第です。これらのソフトウェアディストリビューターは、生成されたパッケージを標準のディストリビューションコードリポジトリ(例:fedora / red hat network yumリポジトリ)に配置する必要があります。現在、これは行われていませんが、Java 8が2014年3月にリリースされたときに、Java 8 LinuxパッケージにJavaFXが含まれていないとしたら、私はかなり驚かれるでしょう。

アップデート、2019年12月

これで、JavaFXはほとんどのバイナリJDKおよびJREディストリビューション(Oracleのディストリビューションを含む)から分離され、代わりにスタンドアロンSDK、jmodのセット、または中央のMavenリポジトリから利用できるライブラリ依存関係として利用できますhttps://openjfx.io)、標準のLinux OpenJDKディストリビューションでJavaFXを含める必要はほとんどありません。

JavaFXを含むビルド済みのJDKが必要な場合は、さまざまなプラットフォーム用に提供されているLiberica JDKディストリビューションを検討してください。

実質的なアプリケーションの展開に関するアドバイス

Javaの自己完結型アプリケーションデプロイメントモードを使用することをお勧めします。

この配置モードの説明は次のとおりです。

アプリケーションはローカルドライブにインストールされ、JavaおよびJavaFXランタイムのプライベートコピーを使用してスタンドアロンプ​​ログラムとして実行されます。アプリケーションは、デスクトップショートカットやメニューエントリなどを使用して、そのオペレーティングシステムの他のネイティブアプリケーションと同じ方法で起動できます。

Oracle JDKディストリビューションから、またはJavaFXを含むOpenJDKビルドから、自己完結型アプリケーションを構築できます。現在、Oracle JDKを使用する方が簡単です。

Javaのバージョンがアプリケーションにバンドルされているため、マシンにプリインストールされているJavaのバージョン、Javaの機能、プログラムと互換性があるかどうかを気にする必要はありません。代わりに、正確なJavaランタイムバージョンに対してアプリケーションをテストし、それをアプリケーションと共に配布できます。アプリケーションをデプロイするためのユーザーエクスペリエンスは、マシンにネイティブアプリケーションをインストールする場合と同じです(たとえば、Windows .exeまたは.msiがインストールされている、OS X .dmg、linux .rpmまたは.deb)。

注:自己完結型アプリケーション機能はJava 8および9でのみ利用可能で、Java 10-13では利用できませんでした。Java 14は、JEP 343:Packaging Toolを介して、OpenJDKディストリビューションからこの機能のサポートを再度提供する予定です。

2018年4月の更新:将来の開発に対するOracleの現在のポリシーに関する情報


@Emmanuel、これであなたの仕事をありがとう。JavaFXはJDKの一部であるため、(少なくともJDKがモジュール化されるまで)必要なすべてのランタイムファイルを標準のOpenJDKパッケージに含めるのではなく、別のOpenJFXパッケージが存在する理由がわかりません( Oracle JDKディストリビューション)。オープンJFXメーリングリストは、さらなる議論が必要な場合は良い場所でしょう。
jewelsea

別のパッケージは、誰かがJDKに興味があるがJavaFXには興味がない場合にある程度の柔軟性を提供します。結局のところ、モジュール化はJava 9の目的ではありませんか?:)
Emmanuel Bourg

11
「現在、これは行われていませんが、Java 8が2014年3月にリリースされたときに、Java 8 LinuxパッケージにJavaFXが含まれていなかったとしたら、私はかなり驚きます。」OpenJDK 8にはOpenJFXが含まれていないため、驚かれるはずです。

2
Arch Linuxには、openjfx用のパッケージもあります。archlinux.org/ packages
MaciekŁoziński16年

2
@NoBugsこれは応答が遅すぎて役に立たない可能性がありますが、Ubuntu 14.04にはOpenJDK 8が含まれていないため、対応するJFXパッケージが見つかりません。どのUbuntuリリースで導入されたかは思い出せませんが、Ubuntu 16.04では「openjfx」パッケージと一緒に確実に利用できます。
Mike Allen、

50

私にとってこれはうまくいきました。

$ sudo apt-get install openjfx

3
おそらくJavaFXをLinux JDKに追加する最も簡単な方法
Reimeus

これは多くの人にとって正しい答えですが、一部のOSはこのパッケージを提供していません。webupd8 PPAUbuntuとfedyFedoraのデスクトップインストーラーに対応していない場合、JavaFXを含む最新のOracle JDK / JREをセットアップする2つの簡単な方法があります。
tresf 2016

3
Ubuntu 18.04の場合、Java 8に依存しますが、デフォルトはJava 10です。インストールすると、Javaが2つになります。
jgomo3

openjdk-11とともにopenjfxをインストールする方法によると、Javaバージョン11以降では、JavaFXを使用するのではなくapt-get install openjfx(現在はJava 8でのみ機能します)、JavaFXが「プラットフォーム固有のSDKとして利用可能」であるopenjfx.io Webサイトからの指示を数字として使用できます。 jmodの、そしてmaven中央のアーティファクトのセットとして。」
jewelsea

A Debianのopenjfxパッケージは、OpenJDKの-11でリリースされましたtracker.debian.org/pkg/openjfxので、おそらく、この方法を。sudo apt-get install openjfx、引き続きサポートされ、以降のJavaFXおよびubuntuリリースでも機能します。Debian openjfxパッケージは、openjfx.ioによって配布されたライブラリほど頻繁には更新されないように見えるため、最新バージョンを使用したい場合は、openjfx.io配布を使用するのが最善です。
jewelsea

11

簡単な解決策として、JavaFXランタイムJARファイルと、Oracle JRE(JDK)またはJavaFXを使用する自己完結型アプリケーション(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/

ちょうどあなたがgtk 2.18以上を持っていることを確認してください


Ubuntu 18.04でopenjfxがインストールされている場所を見つけることができませんが、ハードディスクにインストールされている別のプログラムからこれらのjarファイルやその他のファイルを盗みました(phpstormやclionなどを確認できます)。ありがとう
Heichou

JDK1.8.0_251(Oracle Java 1.8)からjava-8-openjdk-amd64(ubuntuレポジトリOpenJDK 8)にファイルをコピーしました。それでもJavaFXでjarファイルを実行できませんでした。しかし、Eclipseビルドパスで外部ライブラリjarとしてjfxrt.jarにリンクしただけでは、プログラムはEclipseコンテキスト内で実行されました。「apt-cache policy libgtk2.0-0」を実行すると、「Installed:2.24.32-1ubuntu1」
Phil Freihofner

7

この質問にも答えます:

OpenJDK用のビルド済みJavaFXライブラリはどこで入手できますか(Windows)

Linuxではそれは実際には問題ではありませんが、Windowsでは、特にJREを配布する場合はそれほど簡単ではありません。

実際には、OpenJFXをOpenJDK 8とともにWindowsで使用できます。自分でアセンブルする必要があります。

こちらからOpenJDKをダウンロードします。https//github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

こちらからOpenJFXをダウンロードしてください:https : //github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

OpenFX zipからすべてのファイルをJDKの上にコピーします。出来れば、JavaFXを備えたOpenJDKがあります。

更新

幸い、AzulからOpenJDK + OpenJFXビルドがリリースされました。コミュニティページでダウンロードできます:https ://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx


ありがとう。AdoptOpenJDK github-siteを確認しましたが、「レガシーリポジトリ」と表示されています。新しいマッチングOpenJFX-バイナリが利用可能マッチングが新しいレポのビルドされた場合、あなたは知っていますgithub.com/AdoptOpenJDK/openjdk8-binaries/releases
Houtman、2018

3

obuildfactoryを試してください。

これらのスクリプトを変更する必要があります(エラーが含まれ、必要な「こと」を正確に実行しない)。今後数日で、obuildfactoryからフォークされた鉱山スクリプトをアップロードします。それに応じて私の答えも更新します。

それまでお楽しみください、


1
残念ながら、OpenJFXに対応するWindows版はありません
madduci

0

Oracleによると、OpenJDKとjavaFXの統合は2014年第1四半期になる予定です(ロードマップを参照してください:http ://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html )。したがって、最初の質問の答えは、それまで待つ必要があるということです。2番目の質問については、他に方法はありません。したがって、今のところjava swingを使用するか、javaFXを起動して待機します。


回答のリンクが壊れています。私が同様のページに来た最後の
ILMostro_7 '28

@ ILMostro_7コメントのリンクが壊れています
Blake

十分古いです。新しい計画が具体化するにつれ、彼らはサイトを変えると確信しています。
ILMostro_7

次のサイトは、javafxがjava-11以降のスタンドアロンライブラリになることを示しています。 oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.