Podczas próby użycia klas powiązanych z javafx w moim nowym projekcie java 8 otrzymuję błąd ograniczenia dostępu z eclipse. Jak dotąd jedynym „rozwiązaniem”, jakie udało mi się znaleźć, jest nakazanie Eclipse ignorowania ograniczeń dostępu, ale nie jestem z tego zadowolony. Przykład błędu:
Access restriction: The type Pane is not accessible due to
restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar
Używam Eclipse Kepler z poprawką Eclipse JDT dla java 8.
Wydaje się, że jest to problem związany z faktem, że JavaFX nie jest częścią środowiska wykonawczego JavaSE.
Jestem teraz mocno zdezorientowany, ponieważ według http://en.wikipedia.org/wiki/JavaFX javaFX jest częścią JavaSE. Czy to możliwe, że Eclipse nie rozpoznaje, że jest częścią javaSE?
Odpowiedzi:
Z punktu widzenia Eclipse błąd jest całkowicie poprawny, ponieważ JavaFX pochodzi ze ścieżki klas rozszerzenia i nie jest dostępna na WSZYSTKICH maszynach wirtualnych Java8 (np. Ibm!).
Jak wspomniano, możesz stłumić te ostrzeżenia, dodając reguły dostępu lub IMHO. Najlepszym rozwiązaniem jest zainstalowanie klipsu e (fx), który robi to automatycznie, a poza tym zapewnia nawet narzędzia dla JavaFX CSS i FXML.
Możesz pobrać wszystko w jednym pakiecie z http://efxclipse.bestsolution.at/install.html
źródło
Dodam tutaj jeszcze jedną odpowiedź, aby zapewnić to, co uważam za najbardziej minimalne podejście. W mojej konfiguracji Eclipse mam zainstalowany e (fx) clipse, który zapewnia jedną poprawkę do tego, a także zapewnia wiele przydatnych funkcji programistycznych, które prawie na pewno będziesz potrzebować, pisząc aplikacje JavaFX. Jest to prawdopodobnie najbardziej praktyczne podejście. Jeśli z jakiegoś powodu nie chcesz tej wtyczki, rozwiązanie przedstawione w tej odpowiedzi rozwiąże problem z najmniejszą ilością innych skutków ubocznych.
Jak wskazano w innych odpowiedziach, Eclipse domyślnie nie zezwala na dostęp do klas w plikach jar w katalogu jre / lib / ext, ponieważ nie gwarantuje się ich obecności na wszystkich platformach Java. Jeśli piszesz aplikację JavaFX 8, zakładasz, że jesteś na platformie, na której plik jfxrt.jar jest dostępny w lokalizacji lib / ext.
Zatem minimalnym rozwiązaniem tego problemu jest zezwolenie na dostęp do klas w tym pliku jar (i tylko w tym pliku jar). Aby to zrobić, kliknij prawym przyciskiem myszy projekt i otwórz okno dialogowe właściwości projektu. Wybierz opcję „Buduj ścieżkę” w lewym okienku i wybierz kartę „Biblioteki”. Zobaczysz wpis „JRE System Library”. Rozwiń ten wpis, a zobaczysz podpozycję „Reguły dostępu”:
Wybierz wpis „Reguły dostępu” i kliknij „Edytuj”. Kliknij „Dodaj”.
W sekcji „Rozdzielczość” wybierz „Dostępne” i w sekcji „Wzorzec reguły” wpisz
javafx/**
:Kliknij OK, aby zamknąć wszystkie okna dialogowe.
To ustawienie umożliwi dostęp do wszystkich klas w każdym paczce
javafx.
, ale zachowa regułę w folderze ext dla wszystkich innych klas i jest w tym sensie „minimalne”.Ponownie, to, co prawdopodobnie naprawdę chcesz zrobić, to zainstalować wtyczkę e (fx) clipse, ale według mojej wiedzy jest to rozwiązanie z najmniejszymi efektami ubocznymi w konfiguracji Eclipse.
źródło
e(fx)clipse is providing many useful development features
. W e (fx) clipse 2.6 dodano nowy element,SashPane
który rozwiązuje niektóreSliderPane
problemy, ale naprawdę nie mogę tego zrozumieć. Czy są jakieś klasy, których możemy użyć z e (fx) clipse? Nie mogę znaleźć niczego podobnego. Chodzi mi o to, że nie mogę uzyskać dostępu do żadnej klasy ani znaleźć czegoś przydatnego, co mogę użyć w programie, mam na myśli bibliotekę. Popraw mnie, bo wiem, że gdzieś się mylę ... :)Rozwiązałem problem, usuwając i wczytując JDK do ścieżki budowania. Nie pytaj mnie jednak, dlaczego to działa.
źródło
Najprostszym sposobem jest zainstalowanie e (fx) clipse - wtyczki do Eclipse obsługującej JavaFX:
Oryginalne informacje można znaleźć tutaj: https://www.eclipse.org/efxclipse/install.html#for-the-lazy
źródło
Rozwiązałem ten problem ostrożnie używając ścieżki budowania projektu Eclipse.
To powoduje, że Eclipse postrzega jfxrt.jar jako zwykły plik JAR innej firmy. Kolejność jest ważna, ponieważ ma pierwszeństwo przed wpisem w bibliotece systemowej JRE. To ten sam rzeczywisty plik JAR, ale Eclipse widzi go inaczej.
Możesz zmienić dowolną konfigurację uruchamiania, aby nie korzystała z „wyeksportowanej” wersji jfxrt.jar; jednak w praktyce nie będzie to miało znaczenia.
Zrobiłem to z Java8 i Eclipse Luna; ale główny byłbym pewien, że działałby z dowolną kombinacją Java i Eclipse.
źródło
pod Biblioteki
Uwaga: upewnij się, że w Eclipse / Preferences (NIE w projekcie) / Java / Installed JRE, jdk wskazuje folder JDK, a nie JRE C: \ Program Files \ Java \ jdk1.8.0_74
źródło
Wiem, że już na to odpowiedziano, ale proponowane rozwiązania wydają mi się niezgrabne.
Inna opcja
W wersji „Mars” (i prawdopodobnie we wcześniejszych wersjach) można wyłączyć błędy ograniczeń dostępu. Pod
Java-> Compiler-> Errors / Warnings view
i
„Wycofany i ograniczony interfejs API”
możesz ustawić „Niedozwolone odniesienie (reguła dostępu)” na ignorowanie.
źródło
Wykonaj następujące kroki:
Dodaj plik jfxrt.jar (z folderu instalacyjnego) jako „Zewnętrzny plik JAR” na karcie „Biblioteki”.
Na karcie „Zamów / Eksportuj” upewnij się, że ten plik jfxrt.jar jest pierwszy na liście.
To zadziałało dla mnie.
źródło
Miałem ten sam problem. Użyłem rozwiązania James_D, ale jego dokładne rozwiązanie nie zadziałało. Ale używając
**/javafx/**
zamiastjavafx/**
rozwiązało problem za mnie. Mam nadzieję, że to pomoże.PS: Chciałbym opublikować to jako komentarz pod rozwiązaniem James_D, ale właśnie się zarejestrowałem i nie miałem wystarczającej „reputacji”, aby to zrobić.
źródło
Jak już zasugerował James_D, dodałem reguły dostępu do mojego pliku ścieżki klas. Odinstalowałem na razie wtyczkę e (fx) clipse, ponieważ ma ona błąd sprawdzania poprawności css (zobacz Jak wyłączyć ostrzeżenie css „Nieznana właściwość” w Eclipse Mars? ).
Oto mój wpis w pliku ścieżki klas dla kontenera JRE:
<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>
źródło
Krok 1: Przejdź do pliku jfxrt.jar. C: \ Program Files \ Java \ jre1.8.0_111 \ lib \ ext
Step-2 Skopiuj plik jfxrt.jar
Krok 3: Przejdź do Eclipse, utwórz nowy folder taki jak ten: [Tworzenie nazwy folderu lib, aby umieścić nasz plik jfxrt.jar] [2] [2]: https://i.stack.imgur.com/YsJ5S.png
Krok 4: Wybierz folder lib i naciśnij CTRL + V, aby wkleić plik jfxrt.jar [Wklej swój jfxrt.jar] [1] [1]: https://i.stack.imgur.com/Ljogu.png
Step-5: Kliknij prawym przyciskiem myszy jfxrt.jar i ustaw jako Build Path.
źródło