JavaFX và OpenJDK


109

Tôi đang cố gắng quyết định xem liệu tôi có thể chuyển sang JavaFX cho giao diện người dùng của ứng dụng Java của mình hay không. Hầu hết người dùng của tôi sẽ sử dụng Oracle JRE, có tích hợp JavaFX ngày nay. Tuy nhiên, một số đang sử dụng OpenJDK (trên linux). Đây (cũ) câu hỏi gợi ý rằng OpenJDK đề rất xấu với JavaFX. Theo câu hỏi này , OpenJFX thay thế sẽ chỉ được tích hợp hoàn toàn vào OpenJDK trong phiên bản 9. Vì vậy, câu hỏi của tôi gồm hai phần:

  • Hỗ trợ JavaFX trong OpenJDK có còn tệ như vậy không?
  • Nếu vậy, có bất kỳ bản phân phối Linux nào đã cung cấp gói OpenJFX để người dùng không phải tự xây dựng nó không?

Là gì chế độ thực thi của ứng dụng của bạn (thế nào là nó được triển khai?)
jewelsea

@jewelsea Nó chạy như một chương trình độc lập.
mdriesen

@docM có phải là giải pháp để chuyển sang oracle- (sun) -jdk cho máy ubuntu không? webupd8.org/2012/01/…
nyyrikki

@nyyrikki Đó là một tùy chọn. Nhưng tôi muốn gắn bó với Java Swing nếu JavaFX và OpenJDK không kết hợp.
mdriesen

2
@Yngve Tôi đã chuyển mọi thứ sang JavaFX khi Ubuntu và Debian bắt đầu bao gồm các gói.
mdriesen

Câu trả lời:


99

JavaFX là một phần của OpenJDK

Bản thân dự án JavaFX là mã nguồn mở và là một phần của dự án OpenJDK .

Cập nhật tháng 12 năm 2019

Để biết thông tin hiện tại về cách sử dụng Mã nguồn mở JavaFX, hãy truy cập https://openjfx.io . Điều này bao gồm các hướng dẫn về cách sử dụng JavaFX như một thư viện mô-đun được truy cập từ JDK hiện có (chẳng hạn như cài đặt Open JDK ).

Kho mã nguồn mở cho JavaFX có tại https://github.com/openjdk/jfx .

Tại vị trí nguồn được liên kết, bạn có thể tìm thấy các tệp giấy phép cho JavaFX mở (hiện tại giấy phép này khớp với giấy phép cho OpenJDK: GPL + classpath ngoại lệ).

Wiki cho dự án có tại: https://wiki.openjdk.java.net/display/OpenJFX/Main

Nếu bạn muốn bắt đầu nhanh chóng để sử dụng JavaFX mở, các bản phân phối JDK của Belsoft Liberica cung cấp các tệp nhị phân được tạo sẵn của OpenJDK (hiện tại) bao gồm JavaFX mở cho nhiều nền tảng khác nhau.

Để phân phối dưới dạng các ứng dụng độc lập, Java 14, được lên lịch triển khai JEP 343: Công cụ đóng gói , "Hỗ trợ các định dạng đóng gói gốc để cung cấp cho người dùng cuối trải nghiệm cài đặt tự nhiên. Các định dạng này bao gồm msi và exe trên Windows, pkg và dmg trên macOS và deb và rpm trên Linux. ", để triển khai các ứng dụng dựa trên OpenJFX với trình cài đặt gốc và không có phụ thuộc nền tảng bổ sung (chẳng hạn như JDK được cài đặt sẵn).


Thông tin cũ hơn có thể trở nên lỗi thời theo thời gian

Xây dựng JavaFX từ kho OpenJDK

Bạn có thể xây dựng một phiên bản mở của OpenJDK (bao gồm cả JavaFX) hoàn toàn từ nguồn không phụ thuộc vào Oracle JDK hoặc mã nguồn đóng.

Cập nhật: Sử dụng bản phân phối JavaFX được tạo sẵn từ các nguồn OpenJDK

Như đã lưu ý trong các nhận xét cho câu hỏi này và trong một câu trả lời khác, các bản phân phối Debian Linux cung cấp tính năng chưng cất nhị phân JavaFX dựa trên OpenJDK:

(hiện tại điều này chỉ hoạt động cho Java 8 theo như tôi biết).

Sự khác biệt giữa Open JDK và Oracle JDK đối với JavaFX

Thông tin sau được cung cấp cho Java 8. Kể từ Java 9, mã hóa VP6 không được dùng cho JavaFXcông nghệ triển khai ứng dụng nhúng Oracle WebStart / Browser cũng không được chấp nhận . Vì vậy, các phiên bản JavaFX trong tương lai, ngay cả khi chúng được phân phối bởi Oracle, có thể sẽ không bao gồm bất kỳ công nghệ nào không phải là mã nguồn mở.

Oracle JDK bao gồm một số phần mềm không thể sử dụng được từ OpenJDK. Có hai thành phần chính liên quan đến JavaFX.

  1. Bộ giải mã video ON2 VP6, thuộc sở hữu của Google và Google không mở nguồn.
  2. Công nghệ triển khai ứng dụng nhúng Oracle WebStart / Browser.

Điều này có nghĩa là phiên bản JavaFX đang mở không thể phát các tệp VP6 FLV. Đây không phải là một tổn thất lớn vì rất khó tìm bộ mã hóa VP6 hoặc phương tiện được mã hóa trong VP6.

Các định dạng video phổ biến hơn khác, chẳng hạn như H.264 sẽ phát tốt với phiên bản JavaFX mở (miễn là bạn đã cài đặt sẵn codec thích hợp trên máy mục tiêu).

Việc thiếu công nghệ triển khai WebStart / Browser Embedded thực sự là điều liên quan đến chính OpenJDK chứ không phải là JavaFX cụ thể. Công nghệ này có thể được sử dụng để triển khai các ứng dụng không phải JavaFX.

Sẽ thật tuyệt nếu cộng đồng OpenSource phát triển một công nghệ triển khai cho Java (và các phần mềm khác) thay thế hoàn toàn các phương pháp triển khai WebStart và Browser Embedded, cho phép trải nghiệm người dùng nhẹ nhàng, ít tác động để phân phối ứng dụng. Tôi tin rằng đã có một số dự án được bắt đầu để phục vụ mục tiêu như vậy, nhưng chúng vẫn chưa đạt được mức độ trưởng thành và mức độ chấp nhận cao.

Cá nhân tôi cảm thấy rằng triển khai WebStart / Browser Embedded là công nghệ kế thừa và hiện có nhiều cách tốt hơn để triển khai nhiều ứng dụng JavaFX (chẳng hạn như các ứng dụng độc lập).

Cập nhật tháng 12 năm 2019:

Phiên bản mã nguồn mở của WebStart cho JDK 11+ đã được phát triển và có sẵn tại https://openwebstart.com .

Ai cần tạo bản phân phối Linux OpenJDK bao gồm JavaFX

Tùy thuộc vào những người tạo gói cho các bản phân phối Linux dựa trên OpenJDK (ví dụ: Redhat, Ubuntu, v.v.) để tạo RPM cho JDK và JRE bao gồm JavaFX. Sau đó, các nhà phân phối phần mềm đó cần đặt các gói đã tạo vào kho mã phân phối tiêu chuẩn của họ (ví dụ: kho lưu trữ mạng yum fedora / red hat). Hiện tại điều này vẫn chưa được thực hiện, nhưng tôi sẽ khá ngạc nhiên nếu các gói Java 8 Linux không bao gồm JavaFX khi Java 8 được phát hành vào tháng 3 năm 2014.

Cập nhật, tháng 12 năm 2019 :

Giờ đây, JavaFX đã được tách ra khỏi hầu hết các bản phân phối JDK và JRE nhị phân (bao gồm cả bản phân phối của Oracle) và thay vào đó, có sẵn dưới dạng SDK độc lập, tập hợp các jmod hoặc dưới dạng phụ thuộc thư viện có sẵn từ kho lưu trữ Maven trung tâm (như được phác thảo như https://openjfx.io ), ít cần các bản phân phối Linux OpenJDK tiêu chuẩn bao gồm JavaFX.

Nếu bạn muốn một JDK được tạo sẵn bao gồm JavaFX, hãy xem xét các bản phân phối Liberica JDK , được cung cấp cho nhiều nền tảng khác nhau.

Lời khuyên về việc triển khai các ứng dụng quan trọng

Tôi khuyên bạn nên sử dụng chế độ triển khai ứng dụng độc lập của Java .

Mô tả về chế độ triển khai này là:

Ứng dụng được cài đặt trên ổ đĩa cục bộ và chạy như một chương trình độc lập sử dụng bản sao riêng của thời gian chạy Java và JavaFX. Ứng dụng có thể được khởi chạy theo cách giống như các ứng dụng gốc khác cho hệ điều hành đó, ví dụ: sử dụng lối tắt trên màn hình hoặc mục nhập menu.

Bạn có thể xây dựng một ứng dụng độc lập từ bản phân phối Oracle JDK hoặc từ bản dựng OpenJDK bao gồm JavaFX. Hiện tại, nó dễ dàng hơn với Oracle JDK.

Vì một phiên bản Java đi kèm với ứng dụng của bạn, bạn không cần phải quan tâm đến phiên bản Java nào có thể đã được cài đặt sẵn trên máy, nó có những khả năng gì và liệu nó có tương thích với chương trình của bạn hay không. Thay vào đó, bạn có thể kiểm tra ứng dụng của mình dựa trên phiên bản thời gian chạy Java chính xác và phân phối phiên bản đó với ứng dụng của bạn. Trải nghiệm người dùng để triển khai ứng dụng của bạn sẽ giống như cài đặt một ứng dụng gốc trên máy của họ (ví dụ: cài đặt windows .exe hoặc .msi, OS X .dmg, linux .rpm hoặc .deb).

Lưu ý: Tính năng ứng dụng độc lập chỉ có sẵn cho Java 8 và 9 chứ không phải cho Java 10-13. Java 14, thông qua JEP 343: Công cụ đóng gói , được lên kế hoạch cung cấp hỗ trợ cho tính năng này một lần nữa từ các bản phân phối OpenJDK.

Cập nhật, tháng 4 năm 2018: Thông tin về chính sách hiện tại của Oracle đối với những phát triển trong tương lai


@Emmanuel, Cảm ơn bạn đã làm việc này. JavaFX là một phần của JDK, vì vậy (ít nhất là cho đến khi JDK được mô-đun hóa) Tôi không chắc tại sao sẽ có một gói OpenJFX riêng thay vì bao gồm tất cả các tệp thời gian chạy cần thiết trong gói OpenJDK tiêu chuẩn (như được thực hiện với Bản phân phối Oracle JDK). Các mailing list mở jfx sẽ là một nơi tốt nếu thảo luận thêm là bắt buộc.
jewelsea,

Một gói riêng biệt mang lại một mức độ linh hoạt nếu ai đó quan tâm đến JDK nhưng không quan tâm đến JavaFX. Rốt cuộc không phải mô-đun hóa là một mục tiêu cho Java 9? :)
Emmanuel Bourg

11
"Hiện tại điều này vẫn chưa được thực hiện, nhưng tôi sẽ khá ngạc nhiên nếu các gói Java 8 Linux không bao gồm JavaFX khi Java 8 được phát hành vào tháng 3 năm 2014". Bạn phải ngạc nhiên vì OpenJDK 8 không bao gồm OpenJFX.

2
Arch Linux cũng có các gói cho openjfx: archlinux.org/packages/?name=java-openjfx
Maciek Łoziński

2
@NoBugs Đây có thể là một phản hồi hơi muộn để hữu ích, nhưng Ubuntu 14.04 không bao gồm OpenJDK 8, đó là lý do tại sao bạn không thể tìm thấy gói JFX tương ứng. Tôi không thể nhớ bản phát hành Ubuntu nào đã giới thiệu nó, nhưng nó chắc chắn có sẵn trong Ubuntu 16.04 - cùng với gói "openjfx".
Mike Allen

50

Đối với tôi điều này đã hiệu quả.

$ sudo apt-get install openjfx

3
Có lẽ là cách dễ nhất để thêm JavaFX vào Linux JDK của bạn
Reimeus

Mặc dù đây là câu trả lời đúng cho nhiều người, nhưng một số hệ điều hành không cung cấp gói này. Đối với những ứng dụng không webupd8 PPAdành cho Ubuntu và trình fedycài đặt dành cho máy tính để bàn dành cho Fedora là hai cách nhanh chóng để thiết lập Oracle JDK / JRE mới nhất bao gồm JavaFX.
tresf

3
Đối với Ubuntu 18.04, nó vẫn phụ thuộc vào Java 8, nhưng mặc định là java 10. Nếu bạn cài đặt nó, bạn sẽ kết thúc với 2 jav.
jgomo

Theo Cách cài đặt openjfx cùng với openjdk-11? , đối với Java phiên bản 11+, để sử dụng JavaFX, thay vì apt-get install openjfx(hiện chỉ hoạt động cho Java 8), bạn có thể sử dụng hướng dẫn từ trang web openjfx.io , nơi JavaFX "có sẵn dưới dạng SDK dành riêng cho nền tảng, dưới dạng một số của jmod và như một tập hợp các hiện vật ở trung tâm maven. ".
jewelsea

Một gói openjfx Debian đã được phát hành cho OpenJDK-11 tại tracker.debian.org/pkg/openjfx , vì vậy có lẽ là phương pháp này. sudo apt-get install openjfx, sẽ tiếp tục được hỗ trợ và hoạt động cho các bản phát hành JavaFX và ubuntu sau này. Lưu ý rằng các gói openjfx của Debian dường như không được cập nhật thường xuyên như các thư viện được phân phối bởi openjfx.io, vì vậy nếu bạn muốn sử dụng phiên bản cập nhật nhất, tốt nhất bạn nên sử dụng bản phân phối openjfx.io.
jewelsea

11

Như một giải pháp nhanh chóng, bạn có thể sao chép tệp JAR thời gian chạy JavaFX và những tệp được tham chiếu từ Oracle JRE (JDK) hoặc bất kỳ ứng dụng độc lập nào sử dụng JavaFX (ví dụ: 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/

chỉ cần đảm bảo bạn có gtk 2.18 trở lên


Tôi không thể tìm thấy nơi openjfx được cài đặt trong Ubuntu 18.04, nhưng tôi đã lấy trộm những cái lọ này và các tệp khác từ một chương trình khác được cài đặt trong đĩa cứng của tôi (bạn có thể kiểm tra một cái gì đó như phpstorm hoặc clion :)) và nó hoạt động như một sự quyến rũ. Cảm ơn bạn
Heichou

Tôi đã sao chép các tệp từ JDK1.8.0_251 (Oracle Java 1.8) sang java-8-openjdk-amd64 (kho lưu trữ ubuntu OpenJDK 8). Vẫn không thể chạy các tệp jar với JavaFX. Nhưng khi tôi chỉ liên kết với jfxrt.jar dưới dạng một jar thư viện bên ngoài trong đường dẫn xây dựng Eclipse của mình, các chương trình đã chạy trong ngữ cảnh Eclipse. Chạy "apt-cache policy libgtk2.0-0" cho "Đã cài đặt: 2.24.32-1ubuntu1"
Phil Freihofner

7

Cũng trả lời câu hỏi này:

Tôi có thể tải các thư viện JavaFX dựng sẵn cho OpenJDK (Windows) ở đâu

Trên Linux nó không thực sự là một vấn đề, nhưng trên Windows thì nó không dễ dàng như vậy, đặc biệt nếu bạn muốn phân phối JRE.

Bạn thực sự có thể sử dụng OpenJFX với OpenJDK 8 trên windows, bạn chỉ cần tự lắp ráp nó:

Tải xuống OpenJDK từ đây: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Tải xuống OpenJFX từ đây: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

sao chép tất cả các tệp từ zip OpenFX trên đầu JDK, thì đấy, bạn có một OpenJDK với JavaFX.

Cập nhật :

May mắn thay từ Azul hiện đã có bản dựng OpenJDK + OpenJFX có thể được tải xuống tại trang cộng đồng của họ: https://www.azul.com/downloads/zulu-community/?&version=java-8-tens&os=windows&package=jdk-fx


cảm ơn. Tôi đã kiểm tra trang github AdoptOpenJDK nhưng nó cho biết "kho lưu trữ kế thừa". Bạn có biết nơi nào có sẵn OpenJFX-binary phù hợp mới hơn phù hợp với các bản dựng của repo mới github.com/AdoptOpenJDK/openjdk8-binaries/releases không?
Houtman

3

Hãy thử obuildfactory .

Cần phải sửa đổi các tập lệnh này (có lỗi và không thực hiện chính xác "điều" được yêu cầu), tôi sẽ tải lên các tập lệnh của tôi được phân nhánh từ obuildfactory trong vài ngày tới. và vì vậy tôi cũng sẽ cập nhật câu trả lời của mình cho phù hợp.

Đến lúc đó hãy tận hưởng bạn ạ :)


1
rất tiếc là không có đối tác Windows nào cho OpenJFX
madduci

0

Theo Oracle, tích hợp OpenJDK & javaFX sẽ vào Q1-2014 (xem lộ trình: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Vì vậy, đối với câu hỏi đầu tiên, câu trả lời là bạn phải đợi cho đến khi đó. Đối với câu hỏi thứ 2 không có cách nào khác. Vì vậy, bây giờ hãy sử dụng java swing hoặc khởi động javaFX và đợi


liên kết trong câu trả lời của bạn bị hỏng. Điều đóng cửa mà tôi đến một trang tương tự là oracle.com/us/corporate/press/1854982
ILMostro_7

@ ILMostro_7 liên kết trong nhận xét của bạn bị hỏng
Blake

Nó đủ lớn. Tôi chắc chắn rằng họ thay đổi địa điểm của họ khi các kế hoạch mới hình thành.
ILMostro_7

Trang web sau chỉ ra rằng javafx sẽ là một thư viện độc lập bắt đầu với java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.