Toegangsbeperking: het type ‘Applicatie’ is geen API (beperking op vereiste bibliotheek rt.jar)

Hier is de code:

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);
    }
}

hier is de fout:

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)

eclipse zegt dit:

Toegangsbeperking: het type ‘Applicatie’ is geen API (beperking op vereiste bibliotheek ‘/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar’)


Antwoord 1, autoriteit 100%

Dit is mij ook overkomen, en de antwoorden die hier al werden gegeven waren niet bevredigend, dus ik deed mijn eigen onderzoek.

Achtergrond: Eclipse toegangsbeperkingen

Eclipse heeft een mechanisme genaamd toegangsbeperkingenom te voorkomen dat u per ongeluk klassen gebruikt waarvan Eclipse denkt dat ze geen deel uitmaken van de openbare API. Meestal heeft Eclipse daar gelijk in, in beide opzichten: we willen meestal niets gebruiken dat geen deel uitmaakt van de openbare API. En Eclipse heeft meestal gelijk over wat wel en niet deel uitmaakt van de openbare API.

Probleem

Er kunnen zich situaties voordoen waarin u openbare niet-API wilt gebruiken, zoals sun.misc(dat zou u niet moeten doen, tenzij u weet wat u doet). En er kunnen situaties zijn waarin Eclipse niet echt klopt (dat is mij overkomen, ik wilde gewoon javax.smartcardiogebruiken). In dat geval krijgen we deze foutmelding in Eclipse.

Oplossing

De oplossing is om de toegangsbeperkingen te wijzigen.

  • Ga naar de eigenschappen van uw Java-project,
    • d.w.z. door “Eigenschappen” te selecteren in het contextmenu van het project in de “Pakketverkenner”.
  • Ga naar “Java Build Path”, tabblad “Bibliotheken”.
  • Breid het bibliotheekitem uit
  • selecteer
    • “Toegangsregels”,
    • “Bewerken…” en
    • “Toevoegen…” een “Resolutie: Toegankelijk” met een bijbehorend regelpatroon.
      Voor mij was dat “javax/smartcardio/**“, voor jou zou het in plaats daarvan “com/apple/eawt/**” kunnen zijn.

Antwoord 2, autoriteit 31%

Ik had hetzelfde probleem. Toen ik het Java-project voor het eerst in Eclipse maakte, specificeerde ik JRE 8. Toen ik naar het buildpad van het project ging en de JRE-systeembibliotheek bewerkte, werd de Java 8-uitvoeringsomgeving geselecteerd. Toen ik ervoor koos om een “Alernate JRE” (nog steeds java 8) te gebruiken, werd de fout voor mij verholpen.


Antwoord 3, autoriteit 24%

Toevoegen van javafxtoegankelijke toestemming in eclipse oxygen
ga naar project> eigenschappen> java bouwpad> bibliotheken> vouw vervolgens de bibliotheken uit en dubbelklik op> Toegangsregels daar stel je de toestemming in
Resolutie: Toegankelijk
Regelpatroon: javafx/**


Antwoord 4, autoriteit 8%

Om te beginnen (en niet-gerelateerd), lijkt het niet het beoogde gebruik om de klasse Applicationzelf te instantiëren. Van wat men kan lezen van zijn source, wordt er van u verwacht dat u de statische instantie gebruikt die wordt geretourneerd door getApplication().

Laten we nu eens kijken naar de fout die Eclipse meldt. Ik ben onlangs een soortgelijk probleem tegengekomen: Access restriction: The method ... is not API (restriction on required project). Ik noemde de methode in kwestie een methode van een object dat die methode van een superklasse heeft geërfd. Het enige wat ik hoefde te doen, was het pakket waarin de superklasse zat, toevoegen aan de pakketten die door mijn plug-in waren geïmporteerd.

Er zijn echter veel verschillende oorzaken voor fouten op basis van “beperking op vereist project/bibliotheek“. Net als bij het hierboven beschreven probleem, kan het type dat u gebruikt afhankelijk zijn van pakketten die niet door de bibliotheek worden geëxporteerd of zelf niet worden geëxporteerd. In dat geval kunt u proberen de ontbrekende pakketten op te sporen en ze zelf te exporteren, zoals hierwordt voorgesteld, of toegangsregels proberen . Andere mogelijke scenario’s zijn:

  • Eclipse wil voorkomen dat u beschikbare pakketten gebruikt die geen deel uitmaken van de openbare Java API (oplossing 1, 2)
  • Afhankelijkheden worden bevredigd door meerdere bronnen, versies zijn tegenstrijdig enz. (oplossing 1, 2, 3)
  • Eclipse gebruikt een JRE waar een JDK nodig is (wat hier het geval kan zijn, afgaande op wat uw fouten zeggen; oplossing) of JRE/JDK-versie in het pad voor projectopbouw is niet de juiste

Dit bleek meer een mengelmoes van problemen met betrekking tot beperkingen dan een echt antwoord. Maar aangezien beperking op vereiste projectenzo’n veelzijdige fout is om te melden, moet het perfecte recept waarschijnlijk nog worden gevonden.


Antwoord 5, autoriteit 6%

Ik had dit probleem omdat het projectfacet dat aan mijn project was gekoppeld de verkeerde Java-versie was.

Om dit op te lossen heb ik het volgende gedaan:

  1. Klik met de rechtermuisknop op het project en selecteer Eigenschappen
  2. Selecteer ‘Project Facets’ en verander versie van Java naar iets groter dan 1.4.
  3. Klik op [Toepassen]

Hiermee wordt uw project opnieuw opgebouwd en hopelijk wordt de fout opgelost.


Antwoord 6, autoriteit 6%

We moesten onze applicatie wijzigen om tegen de JDK 1.8 te bouwen met behulp van Window->Preferences->Java->Geïnstalleerde JRE’s. Na dit te hebben gewijzigd, was de in de Projectverkenner opgegeven JRE-systeembibliotheek echter nog steeds onjuist. Om dit op te lossen, klikt u met de rechtermuisknop op “JRE-systeembibliotheek [wrong-jre-here]” en wijzigt u van Uitvoeringsomgeving: in “Workspace Default (yer-default-here)”


Antwoord 7, autoriteit 5%

Het werkte: Projecteigenschappen -> ProjectFacets -> Looptijden -> jdk1.8.0_45 -> Solliciteer


Antwoord 8, autoriteit 4%

In de bovenste menubalk van Eclipse:

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

Antwoord 9, autoriteit 3%

Als u hetzelfde probleem ondervindt bij het gebruik van Spring Tool Suite:

De onderliggende IDE van de Spring Tool Suite is in feite Eclipse. Ik heb deze foutmelding gekregen, probeer het gewoon om wat com.sun.netklassen te gebruiken. Om deze fouten te verwijderen en te voorkomen dat ze in de Eclipse Luna SR1 (4.4.2) platform van STS vallen:

  • Navigeer naar Project & GT; Eigenschappen
  • Breid de Java-compiler-rubriek
  • uit

  • Klik op fouten / waarschuwingen
  • Verbruik uit de verwijderde en beperkte API
  • naast “Forbidden Reference (Access Rules)” Selecteer “Negeren”
  • naast “Referentie Referentie (toegangsregels)” Selecteer “Negeren”

Je bent goed om te gaan.


Antwoord 10, Autoriteit 2%

had hetzelfde probleem. Dit is hoe ik het heb opgelost:
Ga naar Package Explorer. Klik met de rechtermuisknop op het JRE-systeembibliotheek en ga naar eigenschappen. In de ClassPath Container & GT; Selecteer JRE voor het project Build Path Selecteer de derde optie (Workspace Standaard JRE).

Bron: https://thenewboston.com/forum/topic.php?id= 3917


Antwoord 11, Autoriteit 2%

We gebruiken IBM Rational Application Developer (RAD) en hadden hetzelfde probleem.

ergert:

Toegangsbeperking: het type ‘JaxwsProperties’ is geen API (beperking op de vereiste bibliotheek ‘C: \ ibm \ RAD95 \ JDK \ JRE \ LIB \ RT.JAR’)

oplossing:

Ga naar Java Build Path en Under Library Tab, verwijder JRE System Library. Voeg dan opnieuw bibliotheek toe – & GT; JRE-systeembibliotheek


Antwoord 12, Autoriteit 2%

Ga naar de volgende instelling:

Window – & GT; Voorkeuren – & GT; JAVA-COMPILER-FOUTEN / WAARSCHUWINGEN-VERWIJDERDE EN BEPERKTE API-FORBIDEN REFERENTIE (Toegangsregels)

Stel het in op Warningof Ignore.


Antwoord 13

In Eclipse Mars.2 Release (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
selecteer JRE… en druk op Bewerken: Schakel over naar Workspace JRE (jdk1.8.0_77)

Werkt voor mij.


Antwoord 14

Ik heb eclipse JRE 8.112 , ik weet niet zeker of dat ertoe doet, maar wat ik deed was dit:

  1. Rechts geklikt op mijn projectenmap
  2. ging naar eigenschappen en klikte op
  3. klikte op de map Java build-pad
  4. eenmaal binnen stond ik in de bestelling en export
  5. Ik heb de JRE-systeembibliotheek [jre1.8.0_112] gecontroleerd
  6. verplaatste het vervolgens boven de ene andere JRE-systeembibliotheek daar (niet zeker of dit ertoe deed)
  7. druk vervolgens op ok

Dit heeft mijn probleem opgelost.


Antwoord 15

Ik voeg gewoon e(fx)clipse toe aan de eclipse-marktplaats. Makkelijk en simpel


Antwoord 16

Zelfs als het een oude vraag is, voor mij in Eclipse klik ik gewoon met de rechtermuisknop op Src-mapen eigenschappen (Alt+Enter) en de controle voor de Ignore optional compile problemsde fout verwijderd.


Antwoord 17

Bestaande/geconfigureerde systeembibliotheek verwijderen:
Eclipse(IDE) -> Projectverkenner -> Projectnaam-> (Optie) Pad bouwen -> Build-pad configureren -> Java-opbouwpad -> Bibliotheken -> (Selecteer) JRE-systeembibliotheek [(Voor mij)jre1.8.0_231] -> Verwijderen.

U bevindt zich momenteel op dezelfde locatie:
Eclipse(IDE) -> Projectverkenner -> Projectnaam-> (Optie) Pad bouwen -> Build-pad configureren -> Java-opbouwpad -> Bibliotheken

Voeg nu opnieuw dezelfde systeembibliotheek toe:
Bibliotheek toevoegen -> JRE-systeembibliotheek -> Werkruimte standaard JRE ((Voor mij)jre1.8.0_231) -> Voltooien -> Toepassen -> Sluiten.

Wacht nu om het af te maken.


Antwoord 18

Ik gebruik eclipse neon 3. Ik wilde alleen javafx.application.Application gebruiken, dus ik volgde het antwoord van Christian Hujer hierboven en het werkte. Enkele tips: de toegangsregels lijken erg op de importverklaring. Voor mij waren de toegangsregels die ik heb toegevoegd “javafx/application/**”. Vervang gewoon de punt in het importstatement door een slash en dat is de regel. Ik hoop dat dat helpt.


Antwoord 19

Ik had een iets ander probleem. In Project – Eigenschappen – Bibliotheken – JRE-bibliotheek had ik de verkeerde JRE-libversie. Verwijder en stel de daadwerkelijke in, en voila – alle Access restriction...-waarschuwingen zijn weg.


Antwoord 20

Als iemand dit probleem alleen in uw CI-tool heeft terwijl maven wordt uitgevoerd, was het voor mij de truc om de uitvoeringsomgeving expliciet te definiëren in uw MANIFEST.MF.

In mijn geval deed ik dit door de volgende regel in mijn OSGi-bundelmanifestbestand in te voegen:

Bundle-RequiredExecutionEnvironment: JavaSE-1.8

Other episodes