JavaFX 및 OpenJDK


109

Java 응용 프로그램의 사용자 인터페이스에 대해 JavaFX로 전환 할 수 있는지 여부를 결정하려고합니다. 대부분의 사용자는 요즘 JavaFX가 통합 된 Oracle JRE를 사용합니다. 그러나 일부는 OpenJDK (Linux에서)를 사용하고 있습니다. (오래된) 질문은 OpenJDK가 JavaFX를 매우 나쁘게 처리한다는 것을 암시합니다. 질문 에 따르면 대체 OpenJFX는 버전 9의 OpenJDK에만 완전히 통합됩니다. 그래서 제 질문은 두 가지입니다.

  • OpenJDK의 JavaFX 지원이 여전히 그렇게 나쁜가요?
  • 그렇다면 사용자가 직접 빌드 할 필요가 없도록 이미 OpenJFX 패키지를 제공하는 Linux 배포판이 있습니까?

애플리케이션 의 실행 모드 는 무엇입니까 (어떻게 배포됩니까?)
jewelsea

@jewelsea 독립형 프로그램으로 실행됩니다.
mdriesen 2013 년

@docM이 우분투 머신의 oracle- (sun) -jdk로 전환하는 솔루션이 될까요? webupd8.org/2012/01/…
nyyrikki

@nyyrikki 옵션입니다. 그러나 JavaFX와 OpenJDK가 혼합되지 않으면 Java Swing을 고수하고 싶습니다.
mdriesen 2013 년

2
@Yngve Ubuntu와 Debian이 패키지를 포함하기 시작했을 때 모든 것을 JavaFX로 포팅했습니다.
mdriesen 2015 년

답변:


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 예외).

프로젝트의 위키는 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가 포함됩니다. , and deb and rpm on Linux. ", 기본 설치 프로그램이 있고 추가 플랫폼 종속성 (예 : 사전 설치된 JDK)이없는 OpenJFX 기반 응용 프로그램 배포 용.


시간이 지남에 따라 구식이 될 수있는 오래된 정보

OpenJDK 저장소에서 JavaFX 빌드

Oracle JDK 또는 닫힌 소스 코드에 대한 종속성이없는 소스에서 OpenJDK (JavaFX 포함)오픈 버전을 완전히 빌드 할 수 있습니다 .

업데이트 : OpenJDK 소스에서 미리 빌드 된 JavaFX 배포 사용

이 질문에 대한 의견과 다른 답변에서 언급했듯이 Debian Linux 배포판은 OpenJDK를 기반으로 한 JavaFX 바이너리 배포판을 제공합니다.

(현재 이것은 내가 아는 한 Java 8에서만 작동합니다).

JavaFX와 관련하여 Open JDK와 Oracle JDK의 차이점

다음 정보는 자바 9 자바 제 제공하고, VP6 인코딩을 위해 사용되지 자바 FX오라클 웹 시작 / 브라우저 임베디드 어플리케이션 설치 기술은 중단된다 . 따라서 JavaFX의 향후 버전은 Oracle에서 배포하더라도 오픈 소스가 아닌 기술을 포함하지 않을 것입니다.

Oracle JDK에는 OpenJDK에서 사용할 수없는 일부 소프트웨어가 포함되어 있습니다. JavaFX와 관련된 두 가지 주요 구성 요소가 있습니다.

  1. Google과 Google이 소유 한 ON2 VP6 비디오 코덱은 오픈 소스가 아닙니다.
  2. Oracle WebStart / Browser Embedded 애플리케이션 배포 기술.

이것은 오픈 버전의 JavaFX가 VP6 FLV 파일을 재생할 수 없음을 의미합니다. VP6 인코더 또는 VP6로 인코딩 된 미디어를 찾기가 어렵 기 때문에 이는 큰 손실이 아닙니다.

H.264와 같은 다른 일반적인 비디오 형식은 JavaFX의 개방형 버전에서 정상적으로 재생됩니다 (대상 컴퓨터에 적절한 코덱이 사전 설치되어있는 한).

WebStart / Browser Embedded 배포 기술의 부족은 실제로 JavaFX가 아닌 OpenJDK 자체와 관련이 있습니다. 이 기술은 비 JavaFX 응용 프로그램을 배포하는 데 사용할 수 있습니다.

OpenSource 커뮤니티가 WebStart 및 Browser Embedded 배포 방법을 완전히 대체하는 Java (및 기타 소프트웨어) 용 배포 기술을 개발하여 응용 프로그램 배포에 대해 가볍고 영향이 적은 사용자 경험을 제공한다면 좋을 것입니다. 이러한 목표를 달성하기 위해 시작된 일부 프로젝트가 있다고 생각하지만 아직 높은 성숙도와 채택 수준에 도달하지 못했습니다.

개인적으로 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 저장소)에 배치해야합니다. 현재는이 작업이 수행되지 않고 있지만, 2014 년 3 월 Java 8이 출시 될 때 Java 8 Linux 패키지에 JavaFX가 포함되어 있지 않다면 상당히 놀랄 것입니다.

업데이트, 2019 년 12 월 :

이제 JavaFX는 대부분의 바이너리 JDK 및 JRE 배포 (Oracle 배포 포함)에서 분리되었으며 대신 독립 실행 형 SDK, jmod 세트 또는 중앙 Maven 저장소 에서 사용 가능한 라이브러리 종속성 (다음과 같이 설명 됨)으로 사용할 수 있습니다. https://openjfx.io ), JavaFX를 포함하기 위해 표준 Linux OpenJDK 배포판이 필요하지 않습니다.

JavaFX를 포함하는 사전 빌드 된 JDK를 원한다면 다양한 플랫폼에 제공되는 Liberica JDK 배포판을 고려하십시오 .

실질적인 애플리케이션 배포에 대한 조언

Java의 자체 포함 된 응용 프로그램 배포 모드를 사용하는 것이 좋습니다.

이 배포 모드에 대한 설명은 다음과 같습니다.

응용 프로그램은 로컬 드라이브에 설치되고 Java 및 JavaFX 런타임의 개인 복사본을 사용하여 독립 실행 형 프로그램으로 실행됩니다. 응용 프로그램은 해당 운영 체제의 다른 기본 응용 프로그램과 동일한 방식으로 시작할 수 있습니다 (예 : 바탕 화면 바로 가기 또는 메뉴 항목 사용).

Oracle JDK 배포 또는 JavaFX를 포함하는 OpenJDK 빌드에서 자체 포함 된 애플리케이션을 빌드 할 수 있습니다. 현재 Oracle JDK를 사용하면 더 쉽습니다.

Java 버전이 응용 프로그램과 함께 번들로 제공되므로 시스템에 사전 설치된 Java 버전, 기능 및 프로그램과의 호환성 여부에 대해 신경 쓸 필요가 없습니다. 대신 정확한 Java 런타임 버전에 대해 애플리케이션을 테스트하고이를 애플리케이션과 함께 배포 할 수 있습니다. 응용 프로그램을 배포하는 사용자 경험은 컴퓨터에 기본 응용 프로그램을 설치하는 것과 동일합니다 (예 : 설치된 Windows .exe 또는 .msi, OS X .dmg, linux .rpm 또는 .deb).

참고 : 자체 포함 된 애플리케이션 기능은 Java 10-13이 아닌 Java 8 및 9에서만 사용할 수 있습니다. JEP 343 : Packaging Tool을 통한 Java 14 는 OpenJDK 배포판에서이 기능에 대한 지원을 다시 제공 할 예정입니다.

2018 년 4 월 업데이트 : 향후 개발에 대한 오라클의 현재 정책에 대한 정보


@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/?name=java-openjfx
Maciek Łoziński

2
@NoBugs 유용하기에는 너무 늦었을 수 있지만 Ubuntu 14.04에는 OpenJDK 8이 포함되어 있지 않으므로 해당 JFX 패키지를 찾을 수 없습니다. 어떤 우분투 릴리스가 도입되었는지 기억할 수 없지만 "openjfx"패키지와 함께 우분투 16.04에서 확실히 사용할 수 있습니다.
마이크 알렌

50

나를 위해 이것은 일했습니다.

$ sudo apt-get install openjfx

3
Linux JDK에 JavaFX를 추가하는 가장 쉬운 방법
Reimeus

이것이 많은 사람들에게 정답이지만 일부 OS는이 패키지를 제공하지 않습니다. webupd8 PPAUbuntu 및 fedyFedora 용 데스크탑 설치 프로그램 이 아닌 경우 JavaFX를 포함하는 최신 Oracle JDK / JRE를 빠르게 설정하는 두 가지 방법이 있습니다.
tresf

3
Ubuntu 18.04의 경우 여전히 Java 8에 종속되지만 기본값은 java 10입니다. 설치하면 Java 2 개가됩니다.
jgomo3

openjdk-11과 함께 openjfx를 설치하는 방법에 따르면 ? , Java 버전 11+의 경우 apt-get install openjfx(현재 Java 8에서만 작동하는) 대신 JavaFX를 사용 하려면 openjfx.io 웹 사이트의 지침을 사용할 수 있습니다 . 여기서 JavaFX는 "플랫폼 별 SDK로 사용할 수 있습니다. jmods, 그리고 maven central의 인공물 세트로. ".
jewelsea

tracker.debian.org/pkg/openjfx 에서 OpenJDK-11 용 데비안 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 19

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 (Windows) 용으로 사전 빌드 된 JavaFX 라이브러리는 어디서 구할 수 있습니까?

Linux에서는 실제로 문제가되지 않지만 Windows에서는 특히 JRE를 배포하려는 경우 그렇게 쉽지 않습니다.

실제로 Windows에서 OpenJDK 8과 함께 OpenJFX를 사용할 수 있습니다. 직접 조립하면됩니다.

여기에서 OpenJDK를 다운로드하십시오. https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

여기에서 OpenJFX를 다운로드하십시오 : https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

JDK 위에 OpenFX zip의 모든 파일을 복사하십시오. JavaFX가 포함 된 OpenJDK가 있습니다.

업데이트 :

다행히 Azul에는 커뮤니티 페이지에서 다운로드 할 수있는 OpenJDK + OpenJFX 빌드가 있습니다. https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx


감사. AdoptOpenJDK github-site를 확인했지만 "레거시 저장소"라고 표시됩니다. 새로운 저장소 github.com/AdoptOpenJDK/openjdk8-binaries/releases 의 빌드와 일치하는 최신 일치 OpenJFX-binary를 사용할 수있는 위치를 알고 있습니까?
Houtman

3

obuildfactory를 사용해보십시오 .

이 스크립트를 수정할 필요가 있습니다 (오류가 포함되어 있고 필요한 "일"을 정확히 수행하지 않음). 앞으로 며칠 내에 obuildfactory에서 포크 된 내 스크립트를 업로드 할 것입니다. 따라서 그에 따라 내 답변도 업데이트하겠습니다.

그때까지 즐기십시오. :)


1
불행하게도 OpenJFX에 대한 윈도우의 대응이 없다
madduci

0

Oracle에 따르면 OpenJDK 및 javaFX의 통합은 2014 년 1 분기에있을 예정입니다 (로드맵 : http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html 참조 ). 따라서 첫 번째 질문에 대한 대답은 그때까지 기다려야한다는 것입니다. 두 번째 질문에는 다른 방법이 없습니다. 그래서 지금은 자바 스윙을 사용하거나 javaFX를 시작하고 기다리십시오.


답변의 링크가 끊어졌습니다. 비슷한 페이지에 온
마지막 항목

@ ILMostro_7 귀하의 코멘트에 링크가 깨진
블레이크

충분히 오래되었습니다. 나는 새로운 계획이 구체화됨에 따라 사이트를 변경한다고 확신합니다.
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.