JRE 8 में JavaFX का उपयोग, "एक्सेस प्रतिबंध" त्रुटि


84

जब मैं अपने नए जावा 8 प्रोजेक्ट में javafx संबंधित कक्षाओं का उपयोग करने की कोशिश कर रहा हूं तो मुझे ग्रहण से एक एक्सेस प्रतिबंध त्रुटि मिलती है। अब तक मैं जिस एकमात्र 'समाधान' को पा सका हूं, वह यह है कि ग्रहण को प्रतिबंध प्रतिबंध की अनदेखी करना है, लेकिन मैं इससे संतुष्ट नहीं हूं। त्रुटि का एक उदाहरण:

Access restriction: The type Pane is not accessible due to 
restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar

मैं 8 के लिए ग्रहण JDT पैच के साथ एक्लिप्स केपलर का उपयोग कर रहा हूं।

यह इस तथ्य से संबंधित मुद्दा प्रतीत होता है कि JavaFX JavaSE निष्पादन वातावरण का हिस्सा नहीं है।

मैं अब के अनुसार मुश्किल से उलझन में हूँ http://en.wikipedia.org/wiki/JavaFX javaFX JavaSE का एक हिस्सा है। क्या यह संभव है कि ग्रहण पहचान नहीं रहा है कि यह जावा का एक हिस्सा है?



3
आप सही हो सकते हैं, उनके प्रस्तावित समाधान आधे ने मेरे लिए काम किया। आधे काम से मेरा मतलब है कि अगर मैं 'वर्कस्पेस डिफॉल्ट' jre (jdk1.8.0) का उपयोग करके JRE को जोड़ता हूं, तो यह काम करता है, लेकिन 'निष्पादन पर्यावरण' JavaSE-1.8 (jdk1.8.0) का उपयोग करते समय मेरे पास अभी भी त्रुटि है।
लेक्सिकॉन

जवाबों:


67

ग्रहण बिंदु से त्रुटि पूरी तरह से सही है क्योंकि JavaFX एक्सटेंशन क्लासपाथ से आ रहा है और सभी Java8 VMs (जैसे ibm!) पर उपलब्ध नहीं है।

जैसा कि आप पहुँच-नियम या IMHO जोड़कर उन चेतावनियों को दबा सकते हैं, सबसे अच्छा समाधान ई (fx) क्लिप को स्थापित करना है जो आपके लिए यह स्वचालित रूप से करता है और बगल में आपको JavaFX CSS और FXML के लिए टूलिंग भी प्रदान करता है।

आप एक से एक पैकेज में सभी हड़प सकते हैं http://efxclipse.bestsolution.at/install.html


1
यह समझ में आता है, मुझे एहसास नहीं हुआ कि दूसरे vm ने JFX का समर्थन नहीं किया। मुझे लगता है कि त्रुटि नहीं होने के कारण मेरा मूल प्रश्न अचूक है। दुर्भाग्य से मैं काम पर कुछ राजनीति के कारण आपके प्रस्तावित समाधान का उपयोग करने में असमर्थ हूं।
लेक्सिकॉन

3
तुम्हें पता है कि उन सभी को ग्रहण परियोजनाएं हैं - सभी-में-एक डाउनलोड केवल एक अच्छी सुविधा है जो आपको जल्दी शुरू करने के लिए है। आप चाहें तो Eclipse.org से इंस्टॉल कर सकते हैं। देखें eclipse.org/efxclipse/install.html
tomsontom

मैं जागरूक हूं, लेकिन आंतरिक प्रतिबंधों के कारण मुझे इसका उपयोग करने की अनुमति नहीं है। कहा जा रहा है, अगर आपको लगता है कि यह इस मुद्दे का सबसे अच्छा समाधान है तो मैं आपके उत्तर को सही होने के रूप में चिह्नित करूंगा।
लेक्सिकॉन

5
बस कुछ ओर: यदि आप भी काम पर ग्रहण-प्लग स्थापित नहीं कर सकते हैं तो निश्चित रूप से कुछ गलत है। डेवलपर्स को एक विशिष्ट टूलसेट तक सीमित करना उसके कौशल और कार्य की गुणवत्ता को सीमित करने के बराबर है।
specializt 10

135

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

जैसा कि अन्य उत्तरों में बताया गया है, एक्लिप्स, डिफ़ॉल्ट रूप से, jre / lib / ext directory में जार फाइलों में कक्षाओं तक पहुंच को रोक देता है, क्योंकि ये सभी जावा प्लेटफॉर्म पर मौजूद होने की गारंटी नहीं हैं। यदि आप एक JavaFX 8 एप्लिकेशन लिख रहे हैं, तो आप मान रहे हैं कि आप एक प्लेटफ़ॉर्म पर हैं जहाँ jfxrt.jar लिब / एक्स्ट स्थान पर उपलब्ध है।

तो इसके लिए न्यूनतम फिक्स इस जार फ़ाइल में कक्षाएं (और केवल इस जार फ़ाइल में) तक पहुंच की अनुमति है। ऐसा करने के लिए, प्रोजेक्ट पर राइट-क्लिक करें और प्रोजेक्ट प्रॉपर्टीज़ डायलॉग लाएँ। बाएं फलक में "बिल्ड पाथ" चुनें, और "लाइब्रेरीज़" टैब चुनें। आपको "JRE सिस्टम लाइब्रेरी" प्रविष्टि दिखाई देगी। उस प्रविष्टि का विस्तार करें, और आपको "एक्सेस रूल्स" सबेंट्री दिखाई देगी:

यहां छवि विवरण दर्ज करें

"प्रवेश नियम" प्रविष्टि का चयन करें और "संपादित करें" पर क्लिक करें। "जोड़ें" पर क्लिक करें।

यहां छवि विवरण दर्ज करें

"रिज़ॉल्यूशन" के तहत, "एक्सेसिबल" चुनें, और "नियम पैटर्न" के तहत, दर्ज करें javafx/**:

यहां छवि विवरण दर्ज करें

सभी संवादों से बाहर निकलने के लिए ओके पर क्लिक करें।

यह सेटिंग किसी भी पैकेज की शुरुआत में सभी वर्गों तक पहुंच की अनुमति देगा javafx. , लेकिन अन्य सभी वर्गों के लिए एक्सट्रीम फ़ोल्डर पर नियम को संरक्षित करेगा, और इस अर्थ में "न्यूनतम" होगा।

फिर, जो आप शायद वास्तव में करना चाहते हैं वह है ई (एफएक्स) क्लिपसे प्लगइन स्थापित करना, लेकिन मेरी जानकारी के लिए यह आपके ग्रहण सेटअप पर कम से कम दुष्प्रभाव के साथ समाधान है।


मावेन में पोम से इसे कॉन्फ़िगर करने का एक तरीका भी है?
रोबू

1
क्लियर कट स्पष्टीकरण
xploreraj

@RobAu एक मावेन काम के लिए यहां देखें: stackoverflow.com/questions/32565193/…
स्टीफन

1
सरल और सही !! :)
संतक पटेल

मैं आपके उत्तर की एक पंक्ति में देखता हूं e(fx)clipse is providing many useful development features । एक नया तत्व SashPaneजो कुछ SliderPaneसमस्याओं को ठीक करता है , ई (एफएक्स) क्लिपसे 2.6 में जोड़ा गया है, लेकिन मैं वास्तव में समझ नहीं पा रहा हूं। क्या कोई वर्ग है जिसका उपयोग हम ई (fx) क्लिपसे कर सकते हैं? मुझे कुछ भी समान नहीं मिल रहा है। मेरा मतलब है कि मैं किसी भी वर्ग तक नहीं पहुंच सकता हूं या कुछ उपयोगी नहीं पा सकता हूं जो कि मैं कार्यक्रम के अंदर उपयोग कर सकता हूं, जैसा कि लाइब्रेरी का मेरा मतलब है। सही कारण मुझे पता है कि मैं यहां कहीं गलत हूं ... :)
GOXR3PLUS

19

मैंने JDK को बिल्ड पाथ से हटाकर और पढ़कर समस्या का समाधान किया। हालांकि यह काम क्यों करता है, मुझसे मत पूछो।


1
मेरा मानना ​​है कि आपके द्वारा काम करने का कारण यह है कि जब आप निर्माण पथ पर एक jre पुस्तकालय जोड़ रहे हैं तो यह (ग्रहण) निष्पादन वातावरण का उपयोग करने के बजाय 'कार्यक्षेत्र डिफ़ॉल्ट' jre के लिए डिफ़ॉल्ट रूप से लगता है। जैसा कि JFX को java के एक भाग के रूप में प्रतीत नहीं होता है, जिस envrionment को मैंने चुना है, मैंने त्रुटि को बनाए रखा। जबकि यदि आप बस डिफ़ॉल्ट कार्यक्षेत्र jre जोड़ते हैं तो यह उन प्रतिबंधों को नहीं रखेगा।
Lexxicon

11

आसान तरीका ई (एफएक्स) क्लिप को स्थापित करना है - जावाएफएक्स का समर्थन करने के लिए ग्रहण के लिए एक प्लगइन:

  1. मदद का चयन करें -> नया सॉफ्टवेयर स्थापित करें
  2. निम्नलिखित साइट को जोड़ने के लिए Add बटन पर क्लिक करें:
  3. ओके पर क्लिक करें
  4. "वर्क विथ" में, हाल ही में जोड़े गए साइट "एफ़एक्सक्लिप्स" का चयन करें
  5. इस चयन के सभी घटकों को स्थापित करने के लिए चेकबॉक्स "ई (एफएक्स) क्लिपसे - इंस्टॉल" की जांच करें
  6. स्थापना समाप्त करने के लिए अगले चरणों पर जाएं
  7. अपने ग्रहण को पुनः आरंभ करें। यदि यह अभी भी JavaFX लाइब्रेरी को नहीं पहचानता है, तो इसे फिर से शुरू करें।

मूल जानकारी यहां पाई जा सकती है: https://www.eclipse.org/efxclipse/install.html#for-the-lazy


धन्यवाद;) सरल और आसान
एडम

यह काम करता है, धन्यवाद! बस स्थान URL को अपडेट किया गया: download.eclipse.org/efxclipse/updates-released/3.6.0/site
क्रोझेटा

7

मैंने ग्रहण परियोजना के निर्माण पथ के कुछ सावधान उपयोग द्वारा इस समस्या को हल किया है।

  • आप आवेदन परियोजना के गुणों को सामने लाएँ और 'बिल्ड पाथ' सेक्शन चुनें।
  • 'लाइब्रेरीज़' टैब में "बाहरी जार फ़ाइल" के रूप में jre8_0 \ lib \ ext \ jfxrt.jar जोड़ें।
  • 'ऑर्डर / निर्यात' टैब में यह सुनिश्चित करें कि यह jfxrt.jar सूची में पहले स्थान पर है।

यह क्या कर रहा है एक्लिप्स देखें jfxrt.jar सिर्फ एक नियमित रूप से 3 पार्टी जार फ़ाइल के रूप में। यह आदेश महत्वपूर्ण है ताकि जेआरई सिस्टम लाइब्रेरी में प्रवेश पर पूर्वता हो। यह एक ही वास्तविक JAR फ़ाइल है, लेकिन ग्रहण इसे अलग तरह से देख रहा है।

आप किसी भी रन कॉन्फ़िगरेशन को बदलने की इच्छा कर सकते हैं, इसलिए यह jfxrt.jar के 'निर्यातित' संस्करण का उपयोग नहीं करता है; हालांकि व्यावहारिक रूप से इससे कोई फर्क नहीं पड़ेगा।

मैंने Java8 और एक्लिप्स लूना के साथ ऐसा किया है; लेकिन प्रिंसिपल मुझे जावा और एक्लिप्स के किसी भी संयोजन के साथ काम करना सुनिश्चित करेगा।


6
  • वर्तमान परियोजना के निर्माण पथ पर जाएं

पुस्तकालयों के तहत

  • " JRE सिस्टम लाइब्रेरी [jdk1.8xxx]" चुनें
  • क्लिक संपादित करें पर करें
  • और "कार्यक्षेत्र डिफ़ॉल्ट JRE (jdk1.8xx)" या वैकल्पिक JRE का चयन करें
  • समाप्त पर क्लिक करें
  • ओके पर क्लिक करें

यहां छवि विवरण दर्ज करें

नोट: सुनिश्चित करें कि ग्रहण / वरीयताएँ (परियोजना नहीं) / जावा / स्थापित JRE में, कि jdk JDK फ़ोल्डर को इंगित करता है JRE C नहीं: \ Program Files \ Java \ jdk1.8.0-74

यहां छवि विवरण दर्ज करें


4

मुझे पता है कि इसका उत्तर पहले ही दिया जा चुका है, लेकिन मुझे प्रस्तावित समाधान क्लंकी लगते हैं।

  1. मैं केवल एक अमान्य त्रुटि से बचने के लिए एक प्लगइन स्थापित नहीं करना चाहता।
  2. बाह्य jar के रूप में jfxrt.jar जोड़ना काम करेगा, लेकिन एक बुरा विचार है यदि आप एक निर्यात करने की योजना बनाते हैं क्योंकि jfxrt.jar को भी निर्यात किया जाएगा। शायद नहीं जो आप चाहते हैं।

एक अन्य विकल्प

'मार्स' रिलीज़ (और संभवतः पहले संस्करणों में) आप एक्सेस प्रतिबंध त्रुटियों को अक्षम कर सकते हैं। के अंतर्गत

जावा-> संकलक-> त्रुटियां / चेतावनी दृश्य

तथा

"पदावनत और प्रतिबंधित एपीआई"

आप अनदेखा करने के लिए "निषिद्ध संदर्भ (एक्सेस नियम)" सेट कर सकते हैं।

यहां छवि विवरण दर्ज करें


4

इन कदमों का अनुसरण करें:

  1. 'पुस्तकालयों' टैब में "बाहरी JAR फ़ाइल" के रूप में jfxrt.jar (अपने स्थापना फ़ोल्डर से) जोड़ें।

  2. 'ऑर्डर / निर्यात' टैब में, सुनिश्चित करें कि यह jfxrt.jar सूची में पहले स्थान पर है।

इसने मेरे लिए काम किया।


3

मुझे भी यही समस्या थी। मैंने James_D के समाधान का उपयोग किया लेकिन उसका सटीक समाधान मेरे काम नहीं आया। लेकिन के **/javafx/**बजाय का उपयोग करjavafx/** मेरे लिए समस्या हल करना। उम्मीद है की वो मदद करदे।

पुनश्च: मैं इसे जेम्स_डी के समाधान के तहत एक टिप्पणी के रूप में पोस्ट करूंगा लेकिन मैंने अभी पंजीकृत किया और ऐसा करने के लिए पर्याप्त "प्रतिष्ठा" नहीं थी।


2

जैसा कि जेम्स_ डी ने पहले ही सुझाव दिया था कि मैंने अपनी क्लासपाथ फाइल में एक्सेस नियम जोड़े हैं। मैंने समय के लिए e (fx) क्लिपस प्लगइन को अनइंस्टॉल कर दिया क्योंकि इसमें css सत्यापन बग है (देखें कि ग्रहण मंगल में सीएसएस चेतावनी "अज्ञात संपत्ति" को कैसे निष्क्रिय किया जाए? )।

यहाँ JRE कंटेनर के लिए classpath फ़ाइल में मेरी प्रविष्टि है:

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.‌​launcher.StandardVMType/JavaSE-1.8">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
    </attributes> 
    <accessrules>
        <accessrule kind="accessible" pattern="javafx/**"/>
        <accessrule kind="accessible" pattern="com/sun/javafx/**"/>
    </accessrules>
</classpathentry>

0

चरण -1: अपने jfxrt.jar पर नेविगेट करें। C: \ Program Files \ Java \ jre1.8.0_111 \ lib \ ext

स्टेप -2 फाइल को कॉपी करें jfxrt.jar

चरण -3: ग्रहण पर जाएं, इस तरह एक नया फ़ोल्डर बनाएँ: [फ़ोल्डर नाम बनाने के लिए हमारी jfxrt.jar फ़ाइल डालने के लिए आवश्यक है] [2] [२]: https://i.stack.imgur.com/YsJ5S.png

चरण -4: लिबर फ़ोल्डर का चयन करें और jfxrt.jar को पेस्ट करने के लिए CTRL + V दबाएं [अपना jfxrt.jar] पेस्ट करें [1] [1]: https://i.stack.imgur.com/Ljogu.png

स्टेप -5: jfxrt.jar पर राइट क्लिक करें और बिल्ड पाथ के रूप में सेट करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.