JavaFX और OpenJDK


109

मैं यह तय करने की कोशिश कर रहा हूं कि क्या मैं अपने Java एप्लिकेशन के यूजर इंटरफेस के लिए JavaFX पर स्विच कर सकता हूं। मेरे अधिकांश उपयोगकर्ता Oracle JRE का उपयोग कर रहे हैं, जो इन दिनों JavaFX एकीकृत है। हालांकि, कुछ OpenJDK (लिनक्स पर) का उपयोग कर रहे हैं। यह (पुराना) प्रश्न बताता है कि OpenJDK JavaFX के साथ बहुत बुरा व्यवहार करता है। इस सवाल के अनुसार , वैकल्पिक OpenJFX केवल संस्करण 9 में पूरी तरह से OpenJDK में एकीकृत किया जाएगा। इसलिए मेरा सवाल दुगना है:

  • क्या OpenJDK में JavaFX का समर्थन अभी भी इतना बुरा है?
  • यदि ऐसा है, तो क्या कोई लिनक्स वितरण है जो पहले से ही एक OpenJFX पैकेज की पेशकश करता है ताकि उपयोगकर्ताओं को इसे स्वयं बनाना न पड़े ?

आपके आवेदन का निष्पादन मोड क्या है (यह कैसे तैनात किया गया है?)
गहने

@jewelsea यह एक स्टैंडअलोन प्रोग्राम के रूप में चलता है।
18

@ डॉक्युम यह ओवल्यूशन मशीनों के लिए ओर्केल- (सूर्य) -jdk पर स्विच करने के लिए एक समाधान होगा? webupd8.org/2012/01/…
nyyrikki

@nyyrikki यह एक विकल्प है। अगर JavaFX और OpenJDK मिश्रण नहीं है लेकिन मैं जावा स्विंग के साथ रहना चाहता हूं।
mdriesen

2
@Yngve मैंने सब कुछ जावाएफएक्स में पोर्ट किया जब उबंटू और डेबियन ने पैकेजों को शुरू किया।
mdriesen

जवाबों:


99

JavaFX OpenJDK का हिस्सा है

JavaFX प्रोजेक्ट खुद ही ओपन सोर्स है और OpenJDK प्रोजेक्ट का हिस्सा है

अद्यतन दिसम्बर 2019

ओपन सोर्स जावाएफ़एक्स का उपयोग कैसे करें, इसकी वर्तमान जानकारी के लिए, https://openjfx.io पर जाएँ । इसमें एक मौजूदा JDK (जैसे एक ओपन JDK इंस्टॉलेशन ) से एक्सेस किए गए मॉड्यूलर लाइब्रेरी के रूप में JavaFX का उपयोग करने के निर्देश शामिल हैं ।

JavaFX के लिए ओपन सोर्स कोड रिपॉजिटरी https://github.com/openjdk/jfx पर है

लिंक किए गए स्रोत स्थान पर, आप खुले JavaFX के लिए लाइसेंस फ़ाइलें पा सकते हैं (वर्तमान में यह लाइसेंस OpenJDK: GPL + classpath अपवाद के लिए लाइसेंस से मेल खाता है)।

परियोजना के लिए विकी यहां स्थित है: https://wiki.openjdk.java.net/display/OpenJFX/Main

यदि आप खुले JavaFX का उपयोग करने के लिए एक त्वरित शुरुआत चाहते हैं, तो Belsoft Liberica JDK वितरण OpenJDK के पूर्व-निर्मित बायनेरिज़ प्रदान करता है जो (वर्तमान में) विभिन्न प्लेटफार्मों के लिए खुले JavaFX शामिल हैं।

स्व-निहित अनुप्रयोगों के रूप में वितरण के लिए, जावा 14, JEP 343: पैकेजिंग टूल को लागू करने के लिए निर्धारित किया गया है , जो "उपयोगकर्ताओं को प्राकृतिक स्थापना अनुभव देने के लिए देशी पैकेजिंग प्रारूपों का समर्थन करता है। इन प्रारूपों में शामिल हैं msi और exe पर Windows, pkg और dmg macOS। , और लिनक्स पर डिबेट और आरपीएम। ", मूल इंस्टालर और कोई अतिरिक्त प्लेटफ़ॉर्म निर्भरता (जैसे पूर्व-स्थापित जेडीके) के साथ ओपन जेएफएक्स आधारित अनुप्रयोगों की तैनाती के लिए।


पुरानी जानकारी जो समय के साथ पुरानी हो सकती है

OpenJDK रिपॉजिटरी से JavaFX का निर्माण

आप OpenJDK (जावाएफएक्स सहित) के एक खुले संस्करण को पूरी तरह से उस स्रोत से बना सकते हैं जिसकी ओरेकल जेडडीके या बंद स्रोत कोड पर कोई निर्भरता नहीं है।

अद्यतन: OpenJDK स्रोतों से पूर्व निर्मित JavaFX वितरण का उपयोग करना

जैसा कि इस प्रश्न की टिप्पणियों में और एक अन्य उत्तर में बताया गया है, डेबियन लिनक्स वितरण ओपनफैडब्लूएसपी के आधार पर जावाएफएक्स बाइनरी डिस्टिब्यूशन प्रदान करता है:

(वर्तमान में यह केवल जावा 8 के लिए काम करता है जहाँ तक मुझे पता है)।

JavaFX के संबंध में ओपन JDK और Oracle JDK के बीच अंतर

निम्न जानकारी जावा 8 के लिए प्रदान की गई थी। जावा 9 के रूप में, वीएफ़ 6 एन्कोडिंग को जावाएफएक्स के लिए पदावनत किया जाता है और ओरेकल वेबस्टार्ट / ब्राउज़र एम्बेडेड एप्लिकेशन परिनियोजन तकनीक को भी पदावनत किया जाता है । जावाएफएक्स के भविष्य के संस्करण, भले ही वे ओरेकल द्वारा वितरित किए गए हों, संभवतः किसी भी तकनीक को शामिल नहीं करेंगे जो कि खुला स्रोत नहीं है।

Oracle JDK में कुछ सॉफ्टवेयर शामिल हैं जो OpenJDK से प्रयोग करने योग्य नहीं हैं। दो मुख्य घटक हैं जो JavaFX से संबंधित हैं।

  1. ON2 VP6 वीडियो कोडेक, जो Google के स्वामित्व में है और Google ने इसका स्रोत नहीं खोला है।
  2. Oracle WebStart / Browser एंबेडेड एप्लिकेशन परिनियोजन तकनीक।

इसका मतलब है कि JavaFX का एक ओपन वर्जन VP6 FLV फाइल नहीं चला सकता है। यह कोई बड़ा नुकसान नहीं है क्योंकि वीपी 6 एनकोडर्स या मीडिया को वीपी 6 में एनकोडेड ढूंढना मुश्किल है।

अन्य सामान्य वीडियो प्रारूप, जैसे कि H.264, JavaFX के एक खुले संस्करण के साथ ठीक होगा (जब तक कि आपके पास उपयुक्त टारगेट मशीन पर पूर्व-स्थापित है)।

WebStart / Browser एंबेडेड तैनाती तकनीक की कमी वास्तव में OpenJDK के साथ विशेष रूप से JavaFX के बजाय कुछ करने के लिए ही है। इस तकनीक का उपयोग गैर-जावाएफ़एक्स अनुप्रयोगों को तैनात करने के लिए किया जा सकता है।

यह बहुत अच्छा होगा यदि OpenSource समुदाय ने जावा (और अन्य सॉफ़्टवेयर) के लिए एक परिनियोजन तकनीक विकसित की है जो पूरी तरह से वेबस्टार्ट और ब्राउज़र एंबेडेड परिनियोजन विधियों को प्रतिस्थापित कर देता है, जिससे एप्लिकेशन वितरण के लिए एक अच्छा प्रकाश-भार, कम प्रभाव उपयोगकर्ता अनुभव की अनुमति मिलती है। मेरा मानना ​​है कि इस तरह के लक्ष्य की पूर्ति के लिए कुछ परियोजनाएँ शुरू हुई हैं, लेकिन वे अभी तक उच्च परिपक्वता और गोद लेने के स्तर तक नहीं पहुँची हैं।

व्यक्तिगत रूप से, मुझे लगता है कि वेबस्टार्ट / ब्राउज़र एंबेडेड तैनाती विरासत प्रौद्योगिकी है और वर्तमान में जावाएफ़एक्स के कई अनुप्रयोगों (जैसे स्व-निहित अनुप्रयोग) को तैनात करने के बेहतर तरीके हैं।

अपडेट दिसंबर, 2019:

JDK 11+ के लिए वेबस्टार्ट का एक खुला स्रोत संस्करण विकसित किया गया है और यह https://openwebstart.com पर उपलब्ध है ।

किसे Linux OpenJDK डिस्ट्रीब्यूशन बनाने की जरूरत है जिसमें JavaFX शामिल है

यह उन लोगों पर निर्भर है जो JDK और JRE के लिए RPM बनाने के लिए OpenJDK (जैसे Redhat, Ubuntu आदि) के आधार पर लिनक्स वितरण के लिए पैकेज बनाते हैं जिसमें JavaFX शामिल है। उन सॉफ्टवेयर वितरकों, तो उत्पन्न पैकेजों को उनके मानक वितरण कोड रिपॉजिटरी (उदाहरण के लिए फेडोरा / रेड हैट यम रिपॉजिटरी) में रखने की आवश्यकता होती है। वर्तमान में यह नहीं किया जा रहा है, लेकिन मुझे बहुत आश्चर्य होगा अगर जावा 8 लिनक्स पैकेज में जावा 8 मार्च 2014 में रिलीज़ होने पर जावाएफएक्स को शामिल नहीं किया गया।

अपडेट, दिसंबर 2019 :

अब जब JavaFX अधिकांश बाइनरी JDK और JRE वितरण (Oracle के वितरण सहित) से अलग हो गया है और इसके बजाय, एक स्टैंड-अलोन SDK, jmods का सेट या केंद्रीय Menen रिपॉजिटरी से उपलब्ध लाइब्रेरी निर्भरता के रूप में उपलब्ध है (जैसा कि उल्लिखित है) https://openjfx.io ), JavaFX को शामिल करने के लिए मानक Linux OpenJDK वितरण की आवश्यकता कम है।

यदि आप एक पूर्व-निर्मित JDK चाहते हैं जिसमें JavaFX शामिल हो, तो Liberica JDK वितरण पर विचार करें , जो विभिन्न प्रकार के प्लेटफार्मों के लिए प्रदान किए जाते हैं।

स्थानापन्न अनुप्रयोगों के लिए तैनाती पर सलाह

मैं जावा के स्व-निहित अनुप्रयोग परिनियोजन मोड का उपयोग करने की सलाह देता हूं ।

इस परिनियोजन मोड का विवरण है:

एप्लिकेशन को स्थानीय ड्राइव पर स्थापित किया गया है और जावा और JavaFX रनटाइम की एक निजी कॉपी का उपयोग करके एक स्टैंडअलोन प्रोग्राम के रूप में चलता है। एप्लिकेशन को उस ऑपरेटिंग सिस्टम के अन्य मूल अनुप्रयोगों के समान लॉन्च किया जा सकता है, उदाहरण के लिए डेस्कटॉप शॉर्टकट या मेनू प्रविष्टि का उपयोग करके।

आप Oracle JDK डिस्ट्रीब्यूशन से या OpenJDK बिल्ड जिसमें JavaFX शामिल है, से एक सेल्फ-निहित एप्लिकेशन का निर्माण कर सकते हैं। वर्तमान में Oracle JDK के साथ ऐसा करना आसान है।

जैसा कि जावा के एक संस्करण को आपके एप्लिकेशन के साथ बंडल किया गया है, आपको इस बात की परवाह नहीं है कि जावा के किस संस्करण को मशीन में पहले से इंस्टॉल किया गया है, इसमें क्या क्षमताएं हैं और क्या यह आपके प्रोग्राम के अनुकूल है या नहीं। इसके बजाय, आप एक सटीक जावा रनटाइम संस्करण के खिलाफ अपने आवेदन का परीक्षण कर सकते हैं, और अपने आवेदन के साथ वितरित कर सकते हैं। आपके एप्लिकेशन को लागू करने के लिए उपयोगकर्ता अनुभव उनकी मशीन पर एक मूल एप्लिकेशन इंस्टॉल करने के समान होगा (उदाहरण के लिए एक विंडोज़ .exe या .msi स्थापित, एक OS X .dmg, एक linux .rpm या .deb)।

नोट: स्व-निहित एप्लिकेशन सुविधा केवल जावा 8 और 9 के लिए उपलब्ध थी, और जावा 10-13 के लिए नहीं। जावा 14, जेईपी 343 के माध्यम से : पैकेजिंग टूल , OpenJDK वितरण से इस सुविधा के लिए फिर से सहायता प्रदान करने के लिए निर्धारित है।

अपडेट, अप्रैल 2018: भविष्य के घटनाक्रमों के बारे में ओरेकल की वर्तमान नीति पर जानकारी


@Emmanuel, इस पर आपके काम के लिए धन्यवाद। JavaFX JDK का हिस्सा है, इसलिए (कम से कम जब तक JDK मॉड्यूलर हो जाता है) मुझे यकीन नहीं है कि मानक OpenJDK पैकेज में सभी आवश्यक रनटाइम फ़ाइलों को शामिल करने के बजाय एक अलग OpenJFX पैकेज होगा (जैसा कि इसके साथ किया गया है) Oracle JDK वितरण)। खुले JFX मेलिंग सूची एक अच्छी जगह हो, तो आगे की चर्चा के लिए आवश्यक है जाएगा।
गहने

एक अलग पैकेज लचीलेपन की एक डिग्री देता है यदि कोई व्यक्ति JDK में रुचि रखता है लेकिन JavaFX में नहीं। क्या जावा 9 के लिए सभी के बाद एक उद्देश्यीकरण नहीं है? :)
इमैनुएल बॉगर

11
"वर्तमान में यह नहीं किया जा रहा है, लेकिन मुझे बहुत आश्चर्य होगा अगर जावा 8 लिनक्स पैकेज में जावाएफएक्स शामिल नहीं किया गया था जब जावा 8 मार्च 2014 में जारी किया गया था"। आपको आश्चर्य होना चाहिए क्योंकि OpenJDK 8 में OpenJFX शामिल नहीं है।

2
आर्क लिनक्स में ओपनजैक्स के लिए पैकेज भी हैं: archlinux.org/packages/?name=java-openjfx
Maciek Łoziński

2
@NoBugs यह उपयोगी होने के लिए थोड़ी देर की प्रतिक्रिया हो सकती है, लेकिन Ubuntu 14.04 में OpenJDK 8 शामिल नहीं है, यही कारण है कि आप इसी JFX पैकेज को नहीं पा सकते हैं। मुझे याद नहीं आ रहा है कि उबंटू ने इसे किस रूप में पेश किया है, लेकिन यह निश्चित रूप से उबंटू 16.04 में उपलब्ध है - साथ में "ओपनजफैक्स" पैकेज।
माइक एलन

50

मेरे लिए यह काम कर गया।

$ sudo apt-get install openjfx

3
संभवतः आपके लिनक्स JDK
Reimeus

हालाँकि यह कई लोगों के लिए सही उत्तर है, कुछ OS इस पैकेज को प्रदान नहीं करते हैं। उन लोगों के लिए जो फेडोरा के webupd8 PPAलिए उबंटू और fedyडेस्कटॉप इंस्टॉलर के लिए नहीं हैं, नवीनतम Oracle JDK / JRE सेटअप करने के दो त्वरित तरीके हैं जिनमें JavaFX शामिल है।
tresf

3
उबंटू 18.04 के लिए, यह अभी भी जावा 8 पर निर्भर करता है, लेकिन डिफ़ॉल्ट एक जावा 10 है। यदि आप इसे स्थापित करते हैं, तो आप 2 jasas के साथ समाप्त करेंगे।
jgomo3

के अनुसार openjdk-11 के साथ openjfx स्थापित करने के लिए? जावा संस्करणों के लिए 11+, जावाएफएक्स का उपयोग करने के बजाय, apt-get install openjfx(जो वर्तमान में केवल जावा 8 के लिए काम करता है), आप ओपनजफएक्स.आईओ वेब साइट से निर्देशों का उपयोग कर सकते हैं , जहां जावाएफएक्स "एक प्लेटफॉर्म-विशिष्ट एसडीके के रूप में उपलब्ध है, एक संख्या के रूप में। jmods की, और मावेन सेंट्रल में कलाकृतियों के एक सेट के रूप में। "
गहने

एक डेबियन openjfx पैकेज OpenJDK -11 पर के लिए जारी की गई है tracker.debian.org/pkg/openjfx इस विधि है, तो शायद। sudo apt-get install openjfx, बाद में JavaFX और ubuntu रिलीज के लिए समर्थन और काम जारी रहेगा। ध्यान दें कि डेबियन ओपनजैक्स पैकेज उतने बार अपडेट नहीं किए जाते जितने कि ओपनजफैक्स.आईओ द्वारा वितरित लाइब्रेरी, इसलिए यदि आप सबसे अद्यतित संस्करण का उपयोग करना चाहते हैं, तो संभवत: आप ओपनजैक्सएक्स.आईओ वितरण का उपयोग करके सर्वश्रेष्ठ हैं।
जवाहरात

11

एक त्वरित समाधान के रूप में आप JavaFX रनटाइम JAR फ़ाइल और Oracle JRE (JDK) या किसी भी स्व-निहित एप्लिकेशन से कॉपी कर सकते हैं जो JavaFX (जैसे JavaFX सीन बिल्डर 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 या अधिक है


मुझे पता नहीं चला कि उबंटू 18.04 में कहां ओपनजैफ स्थापित किया गया है, लेकिन मैंने अपनी हार्ड डिस्क में स्थापित एक अन्य प्रोग्राम से इन जार और अन्य फाइलों को चुरा लिया है (आप phpstorm या clion :) जैसी कुछ भी जांच कर सकते हैं) और यह एक आकर्षण की तरह काम करता है। धन्यवाद
Heichou

मैंने JDK1.8.0_251 (Oracle Java 1.8) से java-8-openjdk-amd64 (ubuntu repository OpenJDK 8) की फाइलों की नकल की। JavaFX के साथ जार फाइल्स को चलाने में अभी भी असमर्थ था। लेकिन जब मैं अपने एक्लिप्स बिल्ड पथ में एक बाहरी लाइब्रेरी जार के रूप में jfxrt.jar से जुड़ा था, तो प्रोग्राम ग्रहण संदर्भ के भीतर चला। रनिंग "apt-cache पॉलिसी libgtk2.0-0" ने "इंस्टॉल: 2.24.32-1ubuntu1" दिया
फिल फ्रीइहोफर

7

इस सवाल का जवाब भी:

मुझे OpenJDK (Windows) के लिए पूर्व निर्मित JavaFX लाइब्रेरी कहां मिल सकती है

लिनक्स पर यह वास्तव में एक समस्या नहीं है, लेकिन विंडोज पर यह इतना आसान नहीं है, खासकर यदि आप जेआरई को वितरित करना चाहते हैं।

आप वास्तव में 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 ज़िप से सभी फाइलों को कॉपी करें, आपके पास JavaFX के साथ एक OpenJDK है।

अपडेट :

सौभाग्य से अज़ुल से अब एक 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 के बिल्ड से मेल खाते हुए कहां उपलब्ध है ?
हाटमैन

3

ओब्यूडफैक्टिक कोशिश करें ।

इन लिपियों को संशोधित करने की आवश्यकता है (इसमें त्रुटि है और "आवश्यक रूप से ठीक नहीं है"), मैं अगले कुछ दिनों में ओबुइल्डफैक्ट्री से कांटे की खान लिपियों को अपलोड करूंगा। और इसलिए मैं भी तदनुसार अपना उत्तर अपडेट करूंगा।

तब तक आनंद लीजिए, सर :)


1
दुर्भाग्य से वहाँ OpenJFX के लिए कोई विंडोज समकक्ष नहीं है
madduci

0

OpenJDK और javaFX के Oracle एकीकरण के अनुसार Q1-2014 को होगा (देखें रोडमैप: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html )। तो, 1 सवाल के लिए जवाब है कि आपको तब तक इंतजार करना होगा। दूसरे प्रश्न के लिए कोई दूसरा रास्ता नहीं है। तो, अब जावा स्विंग के साथ जाएं या जावाएफएक्स शुरू करें और प्रतीक्षा करें


आपके उत्तर की लिंक टूट गई है। मैं एक समान पृष्ठ पर आया हुआ चीज़ बंद कर रहा हूं oracle.com/us/corporate/press/1854982
ILMostro_7

@ ILMostro_7 आपकी टिप्पणी में लिंक टूटा हुआ है
ब्लेक

यह काफी पुराना है। मुझे यकीन है कि वे अपनी साइट बदलते हैं क्योंकि नई योजनाएं आकार लेती हैं।
ILMostro_7

निम्न साइट इंगित करती है कि javafx एक स्टैंडअलोन लाइब्रेरी होगी जो java-11 से शुरू होगी। oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.