Oto kod:
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);
}
}
tutaj jest błąd:
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)
zaćmienie mówi tak:
Ograniczenie dostępu: typ „Aplikacja” nie jest API (ograniczenie wymaganej biblioteki „/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar”)
Odpowiedzi:
Mnie też się to przydarzyło, a udzielone tutaj odpowiedzi już nie były satysfakcjonujące, więc przeprowadziłem własne badania.
Tło: ograniczenia dostępu Eclipse
Eclipse ma mechanizm zwany ograniczeniami dostępu który zapobiega przypadkowemu użyciu klas, które zdaniem Eclipse nie są częścią publicznego interfejsu API. Zazwyczaj Eclipse ma co do tego rację, w obu znaczeniach: zwykle nie chcemy używać czegoś, co nie jest częścią publicznego API. Eclipse ma zwykle rację co do tego, co jest, a co nie jest częścią publicznego API.
Problem
Teraz mogą wystąpić sytuacje, w których chcesz użyć publicznego Non-API, na przykład
sun.misc
(nie powinieneś, chyba że wiesz, co robisz). I mogą być sytuacje, w których Eclipse nie jest naprawdę w porządku (to właśnie mi się przydarzyło, po prostu chciałem użyćjavax.smartcardio
). W takim przypadku otrzymujemy ten błąd w Eclipse.Rozwiązanie
Rozwiązaniem jest zmiana ograniczeń dostępu.
javax/smartcardio/**
”, dla ciebie mogłoby to być zamiast tego „com/apple/eawt/**
”.źródło
Miałem ten sam problem. Kiedy początkowo tworzyłem projekt java w Eclipse, określiłem JRE 8. Kiedy wszedłem do ścieżki budowania projektu i edytowałem bibliotekę systemową JRE, wybrano środowisko wykonawcze Java 8. Kiedy zdecydowałem się użyć "Alernate JRE" (wciąż java 8), naprawiło to za mnie błąd.
źródło
Dodanie uprawnień dostępu javafx w eclipse Oxygen przejdź do projektu> właściwości> ścieżka budowania java> biblioteki> następnie rozwiń biblioteki i kliknij dwukrotnie> Reguły dostępu tam ustawisz uprawnienie Rozdzielczość: dostępny wzorzec reguł: javafx / **
źródło
Po pierwsze ( i niezwiązane ),
Application
samodzielne tworzenie instancji klasy nie wydaje się być jej przeznaczeniem. Z tego, co można odczytać ze źródła , oczekuje się raczej użycia instancji statycznej zwróconej przezgetApplication()
.Przejdźmy teraz do raportów o błędach Eclipse. Niedawno napotkałem podobny problem:
Access restriction: The method ... is not API (restriction on required project)
. Nazwałem tę metodę jako metodę obiektu, który odziedziczył tę metodę z superklasy. Wszystko, co musiałem zrobić, to dodać pakiet, w którym znajdowała się super klasa, do pakietów importowanych przez moją wtyczkę.Jednak istnieje wiele różnych przyczyn błędów opartych na „ograniczeniu wymaganego projektu / biblioteki ”. Podobnie jak w przypadku opisanego powyżej problemu, używany typ może mieć zależności od pakietów, które nie są eksportowane przez bibliotekę lub mogą nie być eksportowane samodzielnie. W takim przypadku możesz spróbować znaleźć brakujące pakiety i wyeksportować je samodzielnie, zgodnie z sugestią tutaj , lub wypróbować reguły dostępu. Inne możliwe scenariusze obejmują:
Skończyło się to bardziej jako mieszanina problemów związanych z ograniczeniami niż rzeczywista odpowiedź. Ale ponieważ ograniczenie wymaganych projektów jest tak wszechstronnym błędem, który należy zgłosić, prawdopodobnie nadal można znaleźć idealny przepis.
źródło
Miałem ten problem, ponieważ aspekt projektu powiązany z moim projektem był niewłaściwą wersją Java.
Aby to naprawić, wykonałem następujące czynności:
Spowoduje to odbudowę projektu i miejmy nadzieję, że błąd zostanie rozwiązany.
źródło
Musieliśmy zmienić naszą aplikację tak, aby była zbudowana w oparciu o JDK 1.8, używając Window-> Preferences-> Java-> Installed JREs . Jednak po tej zmianie biblioteka systemowa JRE określona w Eksploratorze projektów nadal była niepoprawna. Aby to naprawić, kliknij prawym przyciskiem myszy „Biblioteka systemowa JRE [błędne-jre-tutaj]” i zmień ze środowiska wykonawczego: na „Domyślny obszar roboczy (yer-default-here)”
źródło
Zadziałało: Właściwości projektu -> ProjectFacets -> Runtimes -> jdk1.8.0_45 -> Apply
źródło
Na górnym pasku menu Eclipse:
źródło
Jeśli masz ten sam problem podczas korzystania z pakietu Spring Tool Suite:
Podstawowym IDE pakietu Spring Tool Suite jest w rzeczywistości Eclipse. Otrzymałem ten błąd właśnie teraz, próbując użyć niektórych
com.sun.net
klas. Aby usunąć te błędy i zapobiec ich pojawianiu się na platformie STS Eclipse Luna SR1 (4.4.2):Jesteś gotowy.
źródło
Miałem ten sam problem. Oto jak to rozwiązałem: Przejdź do Eksploratora pakietów. Kliknij prawym przyciskiem myszy bibliotekę systemową JRE i przejdź do Właściwości. W kontenerze Classpath> Wybierz środowisko JRE dla ścieżki budowania projektu wybierz trzecią opcję (domyślne środowisko JRE obszaru roboczego).
Źródło: https://thenewboston.com/forum/topic.php?id=3917
źródło
Przejdź do następującego ustawienia:
Okno -> Preferencje -> Błędy kompilatora Java / Ostrzeżenia-Przestarzałe i ograniczone odwołanie do zabronionego interfejsu API (reguły dostępu)
Ustaw go na
Warning
lubIgnore
.źródło
Używamy IBM Rational Application Developer (RAD) i mieliśmy ten sam problem.
Komunikat o błędzie:
Ograniczenie dostępu: typ „JAXWSProperties” nie jest interfejsem API (ograniczenie do wymaganej biblioteki „C: \ IBM \ RAD95 \ jdk \ jre \ lib \ rt.jar”)
Rozwiązanie:
przejdź do ścieżki kompilacji java i na karcie Biblioteka usuń bibliotekę systemową JRE. Następnie ponownie Dodaj bibliotekę -> Biblioteka systemowa JRE
źródło
W wydaniu Eclipse Mars.2 (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
wybierz JRE ... i naciśnij Edit: Switch to Workspace JRE (jdk1.8.0_77)
Pracuje dla mnie.
źródło
Mam zaćmienie JRE 8.112, nie jestem pewien, czy to ma znaczenie, ale zrobiłem to:
To rozwiązało mój problem.
źródło
Po prostu dodaję e (fx) clipse na eclipse marketplace. Łatwe i proste
źródło
Używam eclipse neon 3. Chciałem tylko użyć javafx.application.Application, więc zastosowałem się powyżej odpowiedzi Christiana Hujera i zadziałało. Tylko kilka wskazówek: reguły dostępu są bardzo podobne do instrukcji importu. U mnie dodane reguły dostępu to „javafx / application / **”. Po prostu zastąp kropkę w instrukcji import ukośnikiem i taka jest reguła. Mam nadzieję, że to pomoże.
źródło
Miałem trochę inny problem. W Projekt - Właściwości - Biblioteki - Biblioteka JRE mam niewłaściwą wersję biblioteki JRE. Usuń i ustaw właściwy, i voila - wszystkie
Access restriction...
ostrzeżenia zniknęły.źródło
Nawet jeśli to stare pytanie, dla mnie w Eclipse po prostu klikam prawym przyciskiem myszy folder Src i właściwości (Alt + Enter) i sprawdzam, czy
Ignore optional compile problems
usunięto błąd.źródło
Jeśli ktoś ma ten problem tylko w twoim narzędziu CI podczas uruchamiania mavena, to co mi zrobiło, polegało na jawnym zdefiniowaniu środowiska wykonawczego w twoim
MANIFEST.MF
.W moim przypadku zrobiłem to, wstawiając następujący wiersz w moim pliku manifestu pakietu OSGi:
źródło