मैं एक अलग पुस्तकालय के रूप में javafx 12 के साथ Intellij का उपयोग कर रहा हूं। मैं इसे काम करने में कामयाब रहा। मैंने एक गेम बनाया, और ग्राफिक्स बहुत अच्छा काम करते हैं। अब मैं कुछ बटनों के साथ एक मेनू बनाना चाहता था। जब मैं दृश्य की जड़ में एक बटन जोड़ने का प्रयास करता हूं, तो यह एक अपवाद फेंकता है, निम्नलिखित अपवाद के साथ:

Exception in thread "JavaFX Application Thread" java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x77b376ef) cannot access class com.sun.javafx.scene.layout.RegionHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module @0x77b376ef

मैंने इसे गुगल किया और स्टैक ओवरफ्लो पर कुछ समाधान पाए, जो मेरे लिए काम नहीं करते हैं। मेरे कमांड लाइन तर्क निम्नलिखित हैं (उन समाधानों के आधार पर):

--module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" \
--add-modules=javafx.swing,javafx.graphics,javafx.fxml,javafx.media,javafx.web,javafx.scene,javafx.controls \
-p "C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.base.jar" : \
   "C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.graphics.jar"  \
--add-exports javafx.graphics=ALL-UNNAMED \
--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED \
--add-exports javafx.graphics/com.sun.javafx.iio=ALL-UNNAMED \
--add-exports  javafx.graphics/com.sun.javafx.iio.common=ALL-UNNAMED \
--add-exports  javafx.graphics/com.sun.javafx.css=ALL-UNNAMED \
--add-exports  javafx.base/com.sun.javafx.runtime=ALL-UNNAMED \
--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED \
--add-exports javafx.graphics/com.sun.javafx.scene.layout=ALL-UNNAMED

धन्यवाद!

संपादित करें 1: न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण

  1. नवीनतम इंटेलीज डाउनलोड करें
  2. एक नया javafx टेम्प्लेट प्रोजेक्ट बनाएं
  3. javafx लाइब्रेरी जोड़ें
  4. रन कॉन्फ़िगरेशन में कमांड लाइन तर्कों में निम्न पंक्ति जोड़ें:

    --मॉड्यूल-पथ "C:\Program Files\Java\javafx-sdk-11.0.2\lib" \ --add-modules javafx.fxml,javafx.controls

नोट: कृपया जांचें कि पुस्तकालयों का मार्ग सही है।

  1. प्रारंभ विधि को निम्न में बदलें:

    @ ओवरराइड सार्वजनिक शून्य प्रारंभ (चरण प्राथमिक चरण) अपवाद फेंकता है { बटन बटन = नया बटन (); PrimaryStage.setTitle ("हैलो वर्ल्ड"); PrimaryStage.setScene (नया दृश्य (नया समूह (), 300, 275)); प्राइमरीस्टेज.शो (); }

महत्वपूर्ण नोट: कृपया सुनिश्चित करें कि बटन javafx का है, awt लाइब्रेरी का नहीं! यदि आप गलती से awt से बटन आयात करते हैं तो यह काम करेगा।

बटन को रूट (न ही दृश्य) में कभी नहीं जोड़ा जाता है, और यदि आप उस लाइन पर टिप्पणी करते हैं जो बटन बनाता है, तो सब कुछ काम करता है!

2 संपादित करें:

ऐसा लगता है कि मैं अपने द्वारा बनाए गए कॉन्फ़िगरेशन को चला रहा हूं, क्योंकि कमांड लाइन जो इंटेलिज बनाता है (जब मैं क्लिक करता हूं ...) फॉलोइंग है:

"C:\Program Files\Java\jdk-12.0.2\bin\java.exe" --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\lib\idea_rt.jar=50712:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\dusan\Documents\untitled\out\production\untitled;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.web.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.swing.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.media.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.graphics.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.fxml.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.controls.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx-swt.jar" -p "C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.graphics.jar" sample.Main --module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" \ --add-modules javafx.fxml,javafx.controls
4
Dusan Milosevic 22 सितंबर 2019, 17:50

1 उत्तर

सबसे बढ़िया उत्तर

उत्तर आपकी कमांड लाइन में है:

--module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" \
...
-p "C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.base.jar" : \
   "C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.graphics.jar"  \

ध्यान दें कि विकल्प -p बिल्कुल --module-path के समान है (देखें एप्लिकेशन मॉड्यूल पथ JEP 261)।

इसका मतलब है कि आप इसे दो बार जोड़ रहे हैं, लेकिन केवल अंतिम ही प्रबल होता है। इसलिए मॉड्यूल पथ में केवल javafx-base और javafx-graphics जोड़े जाते हैं, इसलिए javafx-controls नहीं है। यह अपवाद (com.sun.javafx.scene.control.ControlHelper से संबंधित) की व्याख्या करता है, और यह तथ्य कि आपने उन सभी --add-exports को अनावश्यक रूप से जोड़ा है।

शायद आप स्विंग, मीडिया या वेब का उपयोग नहीं करेंगे, इसलिए यह कमांड लाइन पर्याप्त से अधिक होगी:

--module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" \
--add-modules javafx.fxml,javafx.controls

ये VM विकल्प आपके IDE में सेट किए जा सकते हैं।

इन सभी को यहां ठीक से प्रलेखित किया गया है: https://openjfx.io/openjfx-docs/ ( अपने विशिष्ट आईडीई के लिए दस्तावेज़ीकरण भी देखें)।

2
José Pereda 22 सितंबर 2019, 18:37