प्रवेश प्रतिबंध: प्रकार 'एप्लिकेशन' एपीआई नहीं है (आवश्यक लाइब्रेरी rt.jar पर प्रतिबंध)


178

यहाँ कोड है:

package mscontroller;

import javax.swing.*;
import com.apple.eawt.Application;

public class Main {
    public static void main(String[] args)
    {
        Application app = new Application();
        app.setEnabledAboutMenu(true);

        AMEListener listener = new AMEListener();
        app.addApplicationListener(listener);
        JFrame mainFrame = new JFrame("Application Menu Example");
        mainFrame.setSize(500, 500);
        mainFrame.setVisible(true);
    }
}

यहाँ त्रुटि है:

Exception in thread "main" java.lang.Error: Unresolved compilation
problems:   Access restriction: The type 'Application' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The constructor 'Application()' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The type 'Application' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The method
'Application.setEnabledAboutMenu(boolean)' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    AMEListener cannot be resolved to a type    AMEListener cannot be
resolved to a type

    at mscontroller.Main.main(Main.java:9)

ग्रहण यह कहता है:

प्रवेश प्रतिबंध: प्रकार 'एप्लिकेशन' API नहीं है (आवश्यक लाइब्रेरी पर प्रतिबंध / 'लाइन्स / Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')


3
जावा का उपयोग करके इसे चलाने की कोशिश करें 7.
प्रवक्ता

2
प्रासंगिकता के लिए इनकी जाँच करें: stackoverflow.com/questions/860187/… , stackoverflow.com/questions/9266632/…
user2864740

Xcode (अभी तक) का उपयोग नहीं करना
www139

मैं जावा को परिचित नहीं हूँ, आदमी एक सटीक रास्ता नहीं देता है। उसका क्या अर्थ है: com / sun / xml / internal / **
www139

1
क्या आप बता सकते हैं कि वह किस रास्ते की बात कर रहा है? धन्यवाद! भविष्य में मैं या तो xCode या netbeans पर स्विच करूंगा। ऊपर वाले ने कहा कि java 7 को ट्राई करना चाहिए?
2113 पर www139

जवाबों:


276

यह मेरे साथ भी हुआ, और यहां पहले से दिए गए उत्तर संतोषजनक नहीं थे, इसलिए मैंने अपना शोध किया।

पृष्ठभूमि: ग्रहण पहुंच प्रतिबंध

एक्लिप्स में एक तंत्र होता है, जिसे एक्सेस प्रतिबंध कहा जाता है ताकि आप गलती से उन कक्षाओं का उपयोग कर सकें, जो ग्रहण सोचते हैं कि यह सार्वजनिक एपीआई का हिस्सा नहीं है। आमतौर पर, ग्रहण सही है, दोनों ही अर्थों में: हम आमतौर पर ऐसी चीज का उपयोग नहीं करना चाहते हैं जो सार्वजनिक एपीआई का हिस्सा नहीं है। और एक्लिप्स आमतौर पर सार्वजनिक एपीआई का हिस्सा नहीं है और क्या है के बारे में सही है।

संकट

अब, ऐसी स्थितियाँ हो सकती हैं, जहाँ आप सार्वजनिक गैर-एपीआई का उपयोग करना चाहते हैं, जैसे sun.misc(आपको तब तक नहीं करना चाहिए, जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं)। और ऐसी परिस्थितियां हो सकती हैं, जहां ग्रहण वास्तव में सही नहीं है (यही मेरे साथ हुआ है, मैं सिर्फ उपयोग करना चाहता था javax.smartcardio)। उस स्थिति में, हमें यह त्रुटि ग्रहण में मिलती है।

उपाय

इसका उपयोग पहुंच प्रतिबंधों को बदलना है।

  • अपने जावा प्रोजेक्ट के गुणों पर जाएं,
    • "पैकेज एक्सप्लोरर" में परियोजना के संदर्भ मेनू से "गुण" का चयन करके।
  • "जावा बिल्ड पाथ", टैब "लाइब्रेरी" पर जाएं।
  • पुस्तकालय प्रविष्टि का विस्तार करें
  • चुनते हैं
    • "पहुँच नियम",
    • "संपादित करें ..." और
    • एक संबंधित नियम पैटर्न के साथ "जोड़ें" "एक संकल्प: सुलभ"। मेरे लिए वह " javax/smartcardio/**" था , आपके लिए यह " com/apple/eawt/**" हो सकता है ।

28
मेरे पास ग्रहण मंगल (4.5.0) है और जावा बिल्ड पाथ -> लाइब्रेरी में कोई एक्सेस नियम नहीं हैं। FWIW एक बड़ा हथौड़ा है (आप उन सभी को बंद कर सकते हैं) प्राथमिकताएं -> जावा -> संकलक -> त्रुटियां / चेतावनी -> पदावनत और प्रतिबंधित एपीआई।
जोनाथन रॉस

4
मेरे पास ग्रहण मार्स 1 रिलीज (4.5.1) है। मेरे लिए दोनों समाधान काम कर गए। ईसाई का जवाब और जोनाथन की टिप्पणी। टैब लाइब्रेरी में आपको "एक्सेस रूल्स" देखने के लिए सूचीबद्ध "JAR और क्लास फोल्डर" में से एक को खोलना होगा।
लेज़्ज़्लो हिरडी

3
यह मेरे लिए काम नहीं करता है। ग्रहण का लूना। JDK 1.8, 1.7, उपयोग किए गए नियम, स्वच्छ परियोजना को जोड़ा, त्रुटियां वापस आती रहती हैं। @JonathanRoss के सुझाव को भी आज़माया - पहले प्रोजेक्ट स्तर पर। हालांकि, निषिद्ध / हतोत्साहित एपीआई के लिए परियोजना-स्तर के कॉन्फिगरेशन को चेतावनी के लिए सेट किया गया था, फिर भी मुझे त्रुटियां मिलीं। मैंने तब (जैसा कि जोनाथन ने सुझाव दिया था) कार्यक्षेत्र स्तर सेटिंग्स के लिए वरीयताओं से गुजर रहा है, और इसके लिए, निषिद्ध एपीआई त्रुटि पर सेट थे। चेतावनी को बदलने से समस्या दूर हो गई, लेकिन परियोजना स्तर की सेटिंग को ओवरराइड किया जाना चाहिए, ऐसा लगता है कि ग्रहण में एक बग है।
स्टीव कोहेन

2
मुझे मेरे मामले में एक्सेस प्रतिबंध को संशोधित करने की अनुमति नहीं दी गई थी: जार "jfxrt.jar" पर मावेन जार परियोजना के साथ ग्रहण नियॉन।
pdem

3
को दूर करने और में JRE सिस्टम लाइब्रेरी वापस जोड़ने, उठाई बाहर के रूप में: वहाँ एक बहुत आसान विकल्प है stackoverflow.com/a/2174607/222838
माइको

81

मुझे भी यही समस्या आ रही थी। जब मैंने शुरू में एक्वा में जावा प्रोजेक्ट बनाया था तो मैंने जेआरई 8. निर्दिष्ट किया था। जब मैं प्रोजेक्ट के निर्माण पथ में गया और जेआरई सिस्टम लाइब्रेरी को संपादित किया, तो जावा 8 निष्पादन पर्यावरण का चयन किया गया। जब मैंने "Alernate JRE" (अभी भी java 8) का उपयोग करना चुना तो इसने मेरे लिए त्रुटि तय कर दी।


2
मैंने वैश्विक सुधार को प्राथमिकता दी है, लेकिन यह उन सभी अन्य उत्तरों से बेहतर है जो विश्व स्तर पर प्रतिबंधित एपीआई को सक्षम करते हैं। (मैं गलती से सूरज का उपयोग नहीं करना चाहता। * मेरे javafx आवेदन में)।
मार्क जेरोनिमस

1
धन्यवाद, यह मेरी परियोजना में सभी चेतावनी को मंजूरी दे दी। ग्रहण उन सभी वर्गों के बारे में शिकायत कर रहा था जो जावाएफ़एक्स (jfxrt.jar) द्वारा प्रदान किए गए थे
गोरान

2
पुष्टि की गई ... मैंने JRE 8 u60 को बदल दिया ... JRE 8 u60 के साथ। जाहिरा तौर पर, इस पुनर्निर्माण को ट्रिगर किया जा रहा है, जैसा कि ऐसा करने के किसी भी अन्य तरीके के विपरीत, समस्या को ठीक करने का साइड-इफेक्ट है। (इस सेटिंग को कैसे बदलना है, इस बारे में अधिक विस्तृत विवरण के लिए, निखिल महाजन का जवाब यहां देखें: stackoverflow.com/questions/6881622/… ।)
बड़े बुजुर्ग

धन्यवाद! इस रणनीति के साथ मैं स्पार्क जावा फ्रेमवर्क को सफलतापूर्वक संकलित करने में सक्षम था।
मार्टिन पाब्स्ट

1
अजीब तरह से यह काम किया। मेरे पास केवल एक जेडीके स्थापित है। कितना अजीब है।
पश्चिमीगुण

65

जोड़ना JavaFX पहुँच नियम पैटर्न:: परियोजना के लिए ग्रहण ऑक्सीजन बार में सुलभ अनुमति> गुण> जावा का निर्माण पथ> पुस्तकालयों> फिर पुस्तकालयों और डबल क्लिक करें विस्तार> एक्सेस तुम वहाँ अनुमति संकल्प सेट नियम JavaFX / **

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

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

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


23

( और असंबंधित ) के साथ शुरू करने के लिए , Applicationअपने आप से कक्षा को तत्काल करना इसका इच्छित उपयोग नहीं लगता है। इसके स्रोत से कोई भी क्या पढ़ सकता है , आपसे यह अपेक्षा की जाती है कि इसके द्वारा दिए गए स्थिर उदाहरण का उपयोग करें getApplication()

अब आइए त्रुटि को ग्रहण करें रिपोर्ट। मैं हाल ही में इसी तरह के मुद्दे पर भाग गया हूं Access restriction: The method ... is not API (restriction on required project):। मैंने प्रश्न में विधि को एक वस्तु की एक विधि के रूप में कहा जो एक सुपर क्लास से विरासत में मिली है। मुझे केवल इतना करना था कि मेरे प्लगइन द्वारा आयातित पैकेज में सुपर क्लास पैकेज को जोड़ना था।

हालांकि, "आवश्यक प्रोजेक्ट / लाइब्रेरी पर प्रतिबंध" के आधार पर त्रुटियों के लिए कई अलग-अलग कारण हैं । ऊपर वर्णित समस्या के समान, आप जिस प्रकार का उपयोग कर रहे हैं, उसमें संकुल के लिए निर्भरता हो सकती है जो कि पुस्तकालय द्वारा निर्यात नहीं किया जाता है या स्वयं निर्यात नहीं किया जा सकता है। उस स्थिति में आप गुम हुए पैकेजों को ट्रैक करने और उन्हें अपने आप निर्यात करने का प्रयास कर सकते हैं, जैसा कि यहाँ सुझाया गया है , या पहुँच नियम आज़माएँ। अन्य संभावित परिदृश्यों में शामिल हैं:

  • ग्रहण आपको उपलब्ध पैकेज का उपयोग करने से रोकना चाहता है जो सार्वजनिक जावा एपीआई (समाधान 1 , 2 ) का हिस्सा नहीं हैं
  • निर्भरताएँ कई स्रोतों से संतुष्ट हैं, संस्करण परस्पर विरोधी हैं आदि (समाधान 1 ,) 2 , 3 )
  • ग्रहण एक JRE का उपयोग कर रहा है जहां एक JDK आवश्यक है (जो कि आपकी त्रुटियों के बारे में यहां से कहा जा सकता है); समाधान ) या प्रोजेक्ट बिल्ड पथ में JRE / JDK संस्करण सही नहीं है

यह एक वास्तविक उत्तर की तुलना में प्रतिबंध से संबंधित मुद्दों की एक मेडली की तरह समाप्त हुआ। लेकिन आवश्यक परियोजनाओं पर प्रतिबंध के बाद से रिपोर्ट की जाने वाली ऐसी बहुमुखी त्रुटि है, सही नुस्खा शायद अभी भी पाया जाना है।


18

मुझे यह समस्या थी क्योंकि मेरी परियोजना के साथ जुड़ा प्रोजेक्ट पहलू गलत जावा संस्करण था।

इसे ठीक करने के लिए मैंने निम्नलिखित कार्य किया है:

  1. प्रोजेक्ट पर राइट क्लिक करें और प्रॉपर्टीज चुनें
  2. 1.4 से अधिक के लिए 'प्रोजेक्ट फेस' का चयन करें और जावा के संस्करण को बदलें।
  3. [लागू करें] पर क्लिक करें

यह आपकी परियोजना का पुनर्निर्माण करेगा और उम्मीद है कि त्रुटि हल हो जाएगी।


15

हमें JDK 1.8 के खिलाफ विंडो-> प्रेफरेंस-> Java-> इंस्‍टॉल JRE का उपयोग करके अपने एप्लिकेशन को बदलना होगा । हालाँकि, इसे बदलने के बाद, प्रोजेक्ट एक्सप्लोरर में निर्दिष्ट JRE सिस्टम लाइब्रेरी अभी भी गलत थी। इसे ठीक करने के लिए, "JRE सिस्टम लाइब्रेरी [गलत-यहाँ-यहाँ]" पर राइट क्लिक करें और एक्ज़ेक्यूशन वातावरण से बदलें: "वर्कस्पेस डिफ़ॉल्ट (yer-default-here)"

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


1
धन्यवाद! यह मेरे जीवन को सुरक्षित
KMC

13

इसने काम किया: प्रोजेक्ट गुण -> प्रोजेक्टफैकेट -> रनटाइम -> jdk1.8.0_45 -> लागू करें


सिस्टम को लटका दिया :(
Saikat

12

ग्रहण शीर्ष मेनू बार में:

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> 
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning

9

यदि आपको स्प्रिंग टूल सूट का उपयोग करके यह समस्या हो रही है:

स्प्रिंग टूल सूट का अंतर्निहित आईडीई वास्तव में, ग्रहण है। मैंने इस त्रुटि को अभी कुछ com.sun.netवर्गों के उपयोग की कोशिश की है । इन त्रुटियों को दूर करने के लिए और एसटीएस के ग्रहण लूना एसआर 1 (4.4.2) प्लेटफॉर्म में पॉप अप करने से उन्हें रोकने के लिए:

  • प्रोजेक्ट> गुणों पर नेविगेट करें
  • जावा कंपाइलर हेडिंग का विस्तार करें
  • त्रुटियों / चेतावनियों पर क्लिक करें
  • विस्तृत और प्रतिबंधित एपीआई का विस्तार करें
  • "निषिद्ध संदर्भ (पहुंच नियम)" के आगे "अनदेखा करें" चुनें
  • "हतोत्साहित संदर्भ (पहुंच नियम)" के आगे "अनदेखा करें" चुनें

आप जाने के लिए अच्छे हैं।


6

एक ही समस्या थी। यहां बताया गया है कि मैंने इसे कैसे हल किया: पैकेज एक्सप्लोरर पर जाएं। JRE सिस्टम लाइब्रेरी पर राइट क्लिक करें और गुण पर जाएं। Classpath कंटेनर में> प्रोजेक्ट बिल्ड पथ के लिए JRE चुनें तीसरा विकल्प (कार्यक्षेत्र डिफ़ॉल्ट JRE) चुनें।

स्रोत: https://thenewboston.com/forum/topic.php?id=3917


1
धन्यवाद ... सी हुजेर द्वारा प्रस्तावित उत्तर का उपयोग करते हुए मैंने वास्तव में पाया कि फाइल jfxrt.jar के लिए "162 नियम (गैर-परिवर्तनीय)" थे!
माइक कृंतक

5

निम्नलिखित सेटिंग पर जाएं:

विंडो -> वरीयताएँ -> जावा-कंपाइलर-त्रुटियां / चेतावनियाँ-अस्वीकृत और प्रतिबंधित एपीआई-निषिद्ध संदर्भ (पहुंच नियम)

इसे सेट करें Warningया Ignore


5

हम आईबीएम तर्कसंगत अनुप्रयोग डेवलपर (आरएडी) का उपयोग करते हैं और एक ही समस्या थी।

त्रुटि संदेश:

प्रवेश प्रतिबंध: प्रकार 'JAXWSProperties' एपीआई नहीं है (आवश्यक पुस्तकालय पर प्रतिबंध 'C: \ IBM \ RAD95 \ jdk \ jre \ lib \ rt.jar')

उपाय:

जावा निर्माण पथ पर जाएं और लाइब्रेरी टैब के तहत, जेआरई सिस्टम लाइब्रेरी को हटा दें। फिर दोबारा लाइब्रेरी जोड़ें -> जेआरई सिस्टम लाइब्रेरी


4

ग्रहण मंगल में .2 रिलीज (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
JRE का चयन करें ... और संपादित करें: कार्यस्थान JRE पर स्विच करें (jdk1.8.0_77)

मेरे लिये कार्य करता है।


3

मेरे पास JRE 8.112 का ग्रहण है, यह निश्चित नहीं है कि क्या मायने रखता है लेकिन मैंने क्या किया है:

  1. मेरे प्रोजेक्ट फ़ोल्डर पर राइट क्लिक किया गया
  2. संपत्तियों के लिए नीचे गया और क्लिक किया
  3. जावा बिल्ड पथ फ़ोल्डर पर क्लिक किया
  4. एक बार अंदर, मैं आदेश और निर्यात में था
  5. मैंने JRE सिस्टम लाइब्रेरी की जाँच की [jre1.8.0_112]
  6. फिर इसे एक अन्य JRE सिस्टम लाइब्रेरी के ऊपर ले जाया गया (सुनिश्चित नहीं है कि क्या यह मामला है)
  7. फिर दबाया ठीक है

इससे मेरी समस्या हल हो गई।


2

मैं बस ग्रहण बाजार में ई (एफएक्स) क्लिप को जोड़ता हूं। आसान और सरल


1

मैं ग्रहण नियॉन 3 का उपयोग कर रहा हूं। मैं सिर्फ javafx.application.Application का उपयोग करना चाहता था, इसलिए मैंने ऊपर क्रिश्चियन हुजर के उत्तर का पालन किया और यह काम किया। बस कुछ सुझाव: पहुंच नियम आयात विवरण के समान हैं। मेरे लिए, मैंने जो एक्सेस नियम जोड़े, वे "javafx / application / **" थे। बस आयात स्टेटमेंट में आगे स्लैश के साथ डॉट को बदलें और यही नियम है। उम्मीद है की वो मदद करदे।


1

मुझे थोड़ी अलग समस्या थी। परियोजना में - गुण - पुस्तकालय - जेआरई पुस्तकालय, मेरे पास गलत JRE परिवाद संस्करण था। निकालें और वास्तविक एक सेट करें, और वॉइला - सभी Access restriction...चेतावनी दूर हैं।


1

यहां तक ​​कि अगर इसके पुराने सवाल, मेरे लिए एक्लिप्स में मैं सिर्फ Src फ़ोल्डर और गुणों (Alt + Enter) पर राइट क्लिक करता हूं और Ignore optional compile problemsत्रुटि को दूर करता हूं ।

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


0

यदि किसी को मावेन चलाते समय केवल आपके CI टूल में यह समस्या हो रही है, तो मेरे लिए क्या चाल थी, जो स्पष्ट रूप से आपके निष्पादन वातावरण को परिभाषित करने के लिए थी MANIFEST.MF

मेरे मामले में, मैंने अपनी OSGi बंडल मेनिफ़ेस्ट फ़ाइल में निम्न पंक्ति सम्मिलित करके ऐसा किया:

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