it-swarm.com.de

Zugriffsbeschränkung: Der Typ 'Application' ist keine API (Einschränkung der erforderlichen Bibliothek rt.jar).

Hier ist der 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 ist der fehler:

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 sagt das:

Zugriffsbeschränkung: Der Typ 'Application' ist keine API (Einschränkung der erforderlichen Bibliothek '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar').

147
www139

Das passierte auch mir, und die Antworten, die hier bereits gegeben wurden, waren nicht zufriedenstellend. Deshalb habe ich meine eigenen Nachforschungen angestellt.

Hintergrund: Eclipse Zugriffsbeschränkungen

Eclipse verfügt über einen Mechanismus, der als Zugriffsbeschränkungen bezeichnet wird, um zu verhindern, dass Sie versehentlich Klassen verwenden, die nach Ansicht von Eclipse nicht Teil der öffentlichen API sind. In der Regel hat Eclipse in beiden Richtungen recht: Wir wollen normalerweise nichts verwenden, was nicht Teil der öffentlichen API ist. Und Eclipse hat in der Regel Recht, was ist und was nicht Teil der öffentlichen API ist.

Problem

Nun kann es Situationen geben, in denen Sie eine öffentliche Nicht-API verwenden möchten, wie Sun.misc (dies sollte nicht der Fall sein, es sei denn, Sie wissen, was Sie tun). Und es kann Situationen geben, in denen Eclipse nicht wirklich richtig ist (genau das ist mir passiert, ich wollte nur javax.smartcardio verwenden). In diesem Fall erhalten wir diesen Fehler in Eclipse.

Lösung

Die Lösung besteht darin, die Zugriffsbeschränkungen zu ändern. 

  • Gehen Sie zu den Eigenschaften Ihres Java-Projekts,
    • durch Auswahl von "Eigenschaften" aus dem Kontextmenü des Projekts im "Paket-Explorer". 
  • Gehen Sie zu "Java Build Path", Registerkarte "Bibliotheken". 
  • Erweitern Sie den Bibliothekseintrag
  • wählen
    • "Zugriffsregeln", 
    • "Bearbeiten ..." und 
    • "Hinzufügen ..." a "Auflösung: Zugänglich" mit einem entsprechenden Regelmuster. Für mich war das "javax/smartcardio/**", für Sie könnte es "com/Apple/eawt/**" sein.
221
Christian Hujer

Ich hatte das gleiche Problem. Als ich das Java-Projekt ursprünglich in Eclipse erstellt hatte, gab ich JRE 8 an. Als ich in den Erstellungspfad des Projekts ging und die JRE-Systembibliothek bearbeitet hatte, wurde die Java 8-Ausführungsumgebung ausgewählt. Als ich mich für "Alernate JRE" (noch Java 8) entschieden habe, wurde der Fehler für mich behoben.

70
Amber

Hinzufügen der Berechtigung "javafx" in Eclipse oxygen Gehen Sie zu Projekt> Eigenschaften> Java-Erstellungspfad> Bibliotheken>, erweitern Sie die Bibliotheken und doppelklicken Sie auf> Zugriffsregeln. Regelmuster: Javafx/**

 enter image description here

 enter image description here

 enter image description here

49
vidyakumargv

Zunächst ( und nicht verwandte ), scheint die Instanziierung der Application -Klasse selbst nicht die beabsichtigte Verwendung zu sein. Von dem, was man aus source lesen kann, wird eher erwartet, dass Sie die statische Instanz verwenden, die von getApplication() zurückgegeben wird.

Kommen wir nun zu den Eclipse-Fehlerberichten. Ich bin kürzlich auf ein ähnliches Problem gestoßen: Access restriction: The method ... is not API (restriction on required project). Ich habe die fragliche Methode als Methode eines Objekts bezeichnet, das diese Methode von einer Superklasse geerbt hat. Ich musste lediglich das Paket, in dem sich die Superklasse befand, zu den Paketen hinzufügen, die von meinem Plugin importiert wurden.

Es gibt jedoch viele verschiedene Ursachen für Fehler, die auf "Einschränkung des erforderlichen Projekts/der Bibliothek " beruhen. Ähnlich wie bei dem oben beschriebenen Problem kann der verwendete Typ von Paketen abhängig sein, die nicht von der Bibliothek exportiert werden oder möglicherweise nicht selbst exportiert werden. In diesem Fall können Sie versuchen, die fehlenden Pakete aufzuspüren und sie selbst zu exportieren, wie vorgeschlagen hier , oder versuchen Sie es mit den Zugriffsregeln. Andere mögliche Szenarien sind:

  • Eclipse möchte Sie davon abhalten, verfügbare Pakete zu verwenden, die nicht Teil der öffentlichen Java API (solution 1 , 2 ) sind.
  • Abhängigkeiten werden von mehreren Quellen erfüllt, Versionen sind widersprüchlich usw. (Lösung 1 , 2 , )
  • Eclipse verwendet eine JRE, bei der ein JDK erforderlich ist (was hier möglicherweise der Fall ist, basierend auf Ihren Fehlern; solution ) oder die JRE/JDK-Version im Projekterstellungspfad ist nicht die richtige

Dies endete eher als ein Gemisch von Restriktionsproblemen als als eine tatsächliche Antwort. Da aber Beschränkung auf benötigte Projekte ein so vielseitiger Fehler zu melden ist, dürfte das perfekte Rezept noch zu finden sein.

22
J. Katzwinkel

Ich hatte dieses Problem, weil die mit meinem Projekt verknüpfte Projektfacette die falsche Java-Version war.

Um dies zu beheben, habe ich Folgendes getan:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften
  2. Wählen Sie "Project Facets" und ändern Sie die Version von Java auf einen Wert größer als 1.4.
  3. Klicken Sie auf [Anwenden]. 

Dadurch wird Ihr Projekt neu erstellt und der Fehler wird hoffentlich behoben.

16
Kiriya Keat

Es hat funktioniert: Projekteigenschaften -> ProjektFacets -> Laufzeiten -> jdk1.8.0_45 -> Übernehmen

13
Kamila O

In der oberen Menüleiste von Eclipse:

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

Wenn Sie das gleiche Problem mit Spring Tool Suite haben:

Die zugrunde liegende Spring Tool Suite IDE ist in der Tat Eclipse. Ich habe diesen Fehler erhalten, als ich gerade versucht habe, einige com.Sun.net-Klassen zu verwenden. So beheben Sie diese Fehler und verhindern, dass sie in der Eclipse Luna SR1 (4.4.2) -Plattform von STS auftauchen: 

  • Navigieren Sie zu Projekt> Eigenschaften 
  • Erweitern Sie die Java-Compiler-Überschrift
  • Klicken Sie auf Fehler/Warnungen 
  • Erweitern Sie die veraltete und eingeschränkte API
  • Wählen Sie neben "Verbotene Referenz (Zugriffsregeln)" die Option "Ignorieren". 
  • Wählen Sie neben "Entmutigte Referenz (Zugriffsregeln)" die Option "Ignorieren" aus. 

Du bist gut zu gehen.

9
Grandclosing

Hatte das gleiche Problem. So habe ich es gelöst: Gehen Sie zum Package Explorer. Klicken Sie mit der rechten Maustaste auf JRE System Library und gehen Sie zu Eigenschaften. Wählen Sie im Classpath Container> JRE für den Projekterstellungspfad auswählen die dritte Option (Standard-JRE für Workspace).

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

5
Nishant_Singh

Gehen Sie zu der folgenden Einstellung:

Fenster -> Einstellungen -> Java-Compiler-Fehler/Warnungen - Veraltete und eingeschränkte API-Verbotene Referenz (Zugriffsregeln)

Setzen Sie es auf Warning oder Ignore.

4
cxj

Wir mussten unsere Anwendung ändern, um das JDK 1.8 mithilfe von Window-> Preferences-> Java-> Installed JREs zu erstellen. Nach der Änderung war die im Projekt-Explorer angegebene JRE-Systembibliothek jedoch immer noch fehlerhaft. Um dies zu beheben, klicken Sie mit der rechten Maustaste auf "JRE-Systembibliothek [falsch-jre-hier]" und wechseln Sie von der Ausführungsumgebung in "Workspace Default (yer-default-here)"

 enter image description here

4
Dinsdale

In Eclipse Mars.2 Release (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
Wählen Sie JRE ... aus und drücken Sie Bearbeiten: Zu Arbeitsbereich JRE wechseln (jdk1.8.0_77) 

Funktioniert bei mir.

3
Sven

Ich habe Eclipse JRE 8.112, nicht sicher, ob das wichtig ist, aber was ich getan habe, war Folgendes:

  1. Rechtsklick auf meinen Projektordner
  2. ging auf Eigenschaften und klickte
  3. auf den Java-Buildpfadordner geklickt
  4. einmal drinnen war ich in der Bestellung und beim Export
  5. Ich habe die JRE-Systembibliothek überprüft [jre1.8.0_112]
  6. verschob es dann über die andere JRE-Systembibliothek (nicht sicher, ob dies eine Rolle spielte)
  7. dann OK gedrückt

Das hat mein Problem gelöst. 

2
quasar-light

Ich füge einfach e (fx) clipse im Eclipse marketplace hinzu. Einfach und einfach

1
jessie

Ich hatte ein anderes Problem. In Projekt - Eigenschaften - Bibliotheken - JRE-Bibliothek hatte ich die falsche JRE-Lib-Version. Entfernen und setzen Sie die aktuelle und voila - alle Access restriction... Warnungen sind weg.

0
Gangnus

Wir verwenden IBM Rational Application Developer (RAD) und hatten das gleiche Problem.

Fehlermeldung:  

Zugriffsbeschränkung: Der Typ 'JAXWSProperties' ist keine API (Einschränkung der erforderlichen Bibliothek 'C:\IBM\RAD95\jdk\jre\lib\rt.jar').

Lösung:

gehen Sie zum Java-Erstellungspfad und entfernen Sie unter Bibliothek die JRE-Systembibliothek. Dann wieder Bibliothek hinzufügen -> JRE System Library

0
Jonas_Hess

Ich benutze Eclipse Neon 3. Ich wollte nur javafx.application.Application verwenden, also folgte ich Christian Hujers Antwort oben und es funktionierte. Nur ein paar Tipps: Die Zugriffsregeln sind der import-Anweisung sehr ähnlich. Für mich waren die Zugriffsregeln "javafx/application/**". Ersetzen Sie einfach den Punkt in der Importanweisung durch einen Schrägstrich und das ist die Regel. Hoffentlich hilft das.

0
Tony S