Використання JavaFX у JRE 8, помилка “Обмеження доступу”


83

При спробі використовувати класи, пов'язані з javafx, у моєму новому проекті java 8 я отримую помилку обмеження доступу від eclipse. Поки що єдине «рішення», яке мені вдалося знайти, - це сказати eclipse ігнорувати обмеження доступу, але мене це не влаштовує. Приклад помилки:

Access restriction: The type Pane is not accessible due to 
restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar

Я використовую Eclipse Kepler з патчем Eclipse JDT для Java 8.

Здається, це проблема, пов'язана з тим, що JavaFX не є частиною середовища виконання JavaSE.

Зараз я сильно заплутаний, оскільки згідно з http://en.wikipedia.org/wiki/JavaFX javaFX є частиною JavaSE. Чи можливо, що Eclipse не визнає, що він є частиною javaSE?



3
Ви можете помилитись, запропоноване ним рішення наполовину спрацювало для мене. Половину спрацьовуючи, я маю на увазі, що якщо я додаю JRE за допомогою jre `` робоча область за замовчуванням '' (jdk1.8.0), він працює, але при використанні `` середовища виконання '' JavaSE-1.8 (jdk1.8.0) я все ще маю помилку.
Lexxicon

Відповіді:


66

З точки зору Eclipse помилка є абсолютно правильною, оскільки JavaFX надходить із шляху розширення до розширення і недоступний на ВСІХ віртуальних машинах Java8 (наприклад, ibm!).

Як зазначено, ви можете придушити ці попередження, додавши правила доступу або IMHO, найкращим рішенням є встановлення e (fx) clipse, який робить це автоматично для вас, і крім того, навіть надає вам інструменти для JavaFX CSS та FXML.

Ви можете отримати все в одному пакеті з http://efxclipse.bestsolution.at/install.html


1
Це має сенс, я не розумів, що інші віртуальні машини не підтримують JFX. Я думаю, що на моє початкове запитання неможливо відповісти, оскільки воно не є помилкою. На жаль, я не можу використати запропоноване вами рішення через певну політику на роботі.
Lexxicon

3
Ви знаєте, що все це проекти Eclipse - все-в-одному завантаження - це просто приємна функція для швидкого початку роботи. Ви також можете встановити з Eclipse.org, якщо хочете. Дивіться eclipse.org/efxclipse/install.html
tomsontom

Я усвідомлюю, але через внутрішні обмеження мені заборонено цим користуватися. З огляду на це, якщо ви вважаєте, що це найкраще рішення цього питання, я позначу вашу відповідь як правильну.
Lexxicon

5
просто щось збоку: якщо ви навіть не можете встановити плагіни eclipse на роботі, то точно щось не так. Обмеження розробників певним набором інструментів дорівнює обмеженню його набору навичок та якості роботи.
спеціалізація

133

Я збираюся додати тут ще одну відповідь, лише щоб надати, на мій погляд, найбільш мінімальний підхід. У моєму налаштуванні Eclipse я встановив e (fx) clipse, який надає одне виправлення для цього, а також надає безліч корисних функцій розробки, які ви майже напевно захочете, якщо ви пишете програми JavaFX. Це, мабуть, найбільш практичний підхід. Якщо з якихось причин ви не хочете використовувати цей плагін, рішення, описане у цій відповіді, вирішить проблему з найменшою кількістю інших побічних ефектів.

Як зазначалося в інших відповідях, Eclipse за замовчуванням забороняє доступ до класів у файлах jar у каталозі jre / lib / ext, оскільки вони не гарантовано будуть присутніми на всіх платформах Java. Якщо ви пишете програму JavaFX 8, ви припускаєте, що знаходитесь на платформі, де jfxrt.jar доступний у розташуванні lib / ext.

Отже, мінімальним виправленням цього є надання доступу до класів у цьому jar-файлі (і лише в цьому jar-файлі). Для цього клацніть проект правою кнопкою миші та відкрийте діалогове вікно властивостей проекту. Виберіть "Побудувати шлях" на лівій панелі та виберіть вкладку "Бібліотеки". Ви побачите запис "Системна бібліотека JRE". Розгорніть цей запис, і ви побачите підзапис "Правила доступу":

введіть тут опис зображення

Виберіть запис "Правила доступу" та натисніть "Редагувати". Клацніть «Додати».

введіть тут опис зображення

У розділі "Роздільна здатність" виберіть "Доступний", а в "Шаблон правила" введіть javafx/**:

введіть тут опис зображення

Натисніть OK, щоб вийти з усіх діалогових вікон.

Цей параметр дозволить отримати доступ до всіх класів у будь-яких пакунках, що починаються javafx., але збереже правило в папці ext для всіх інших класів і в цьому сенсі є "мінімальним".

Знову ж таки, що ви, мабуть, дійсно хочете зробити, це встановити плагін e (fx) clipse, але, наскільки мені відомо, це рішення з найменшими побічними ефектами у вашій програмі Eclipse.


Чи існує також спосіб налаштувати це за допомогою pom in maven?
RobAu

1
Чітке пояснення
xploreraj

@RobAu Ознайомтесь тут з maven: stackoverflow.com/questions/32565193/…
Стефан

1
Простий та ідеальний !! :)
Sanket Patel

Я бачу в одному рядку Вашої відповіді, що e(fx)clipse is providing many useful development features . У e (fx) clipse 2.6 додано новий елемент, SashPaneякий вирішує деякі SliderPaneпроблеми, але я насправді не можу зрозуміти. Чи є якісь класи, які ми можемо використовувати з e (fx) clipse? Я не можу знайти нічого подібного. Я маю на увазі, що я не можу отримати доступ до будь-якого класу або знайти щось корисне, що я можу використовувати всередині програми, як бібліотеку, я маю на увазі. Виправте мене, бо я знаю, що я десь тут помиляюсь ... :)
GOXR3PLUS

19

Я вирішив проблему, видаливши та повторно додавши JDK до шляху збірки. Не питайте мене, чому це працює.


1
Я вважаю, що причина, по якій це могло спрацювати для вас, полягає в тому, що коли ви додаєте бібліотеку jre до шляху збірки, вона (eclipse) здається типовою для jre "робочої області за замовчуванням" замість використання середовища виконання. Оскільки JFX, здається, не є частиною javaSE, вибраного мною середовища, я зберіг помилку. Тоді як ви просто додасте робочу область за замовчуванням jre, вона більше не матиме цих обмежень.
Lexxicon

11

Найпростіший спосіб - встановити e (fx) clipse - плагін для Eclipse для підтримки JavaFX:

  1. Виберіть Довідка -> Встановити нове програмне забезпечення
  2. Натисніть кнопку Додати, щоб додати такий сайт:
  3. Клацніть OK
  4. У розділі "Робота з" виберіть нещодавно доданий сайт "efxclipse"
  5. Установіть прапорець "e (fx) clipse - install", щоб встановити всі компоненти цього вибору
  6. Перейдіть до наступних кроків, щоб завершити встановлення
  7. Перезапустіть Eclipse. Якщо вона все ще не розпізнає бібліотеку JavaFX, перезапустіть її ще раз.

Оригінальну інформацію можна знайти тут: https://www.eclipse.org/efxclipse/install.html#for-the-lazy


Дякую;) Просто і легко
Дж. Адам

Це працює, дякую! Щойно оновив URL-адресу місцезнаходження на: download.eclipse.org/efxclipse/updates-released/3.6.0/site
Крозета,

7

Я вирішив цю проблему шляхом обережного використання шляху збірки проекту Eclipse.

  • Виведіть властивості проекту вашого додатка та виберіть розділ "Шлях побудови".
  • Додайте jre8_0 \ lib \ ext \ jfxrt.jar як "Зовнішній файл JAR" на вкладці "Бібліотеки".
  • На вкладці 'Замовлення / Експорт' переконайтеся, що jfxrt.jar стоїть першим у списку.

Завдяки цьому Eclipse сприймає jfxrt.jar як звичайний сторонній файл JAR. Порядок важливий, щоб це мало перевагу над записом у системній бібліотеці JRE. Це той самий фактичний файл JAR, але Eclipse сприймає його по-різному.

Можливо, ви захочете змінити будь-які конфігурації запуску, щоб він не використовував 'Експортовану' версію jfxrt.jar; однак на практиці це не змінить.

Я зробив це з Java8 та Eclipse Luna; але головний я б впевнений, що працюю з будь-якою комбінацією Java та Eclipse.


5
  • перейти до шляху збірки поточного проекту

під Бібліотеки

  • виберіть " Системна бібліотека JRE [jdk1.8xxx]"
  • натисніть редагувати
  • і виберіть "JRE за замовчуванням для робочої області (jdk1.8xx)" АБО Альтернативний JRE
  • Клацніть закінчити
  • Клацніть OK

введіть тут опис зображення

Примітка: переконайтеся, що в Eclipse / Preferences (НЕ проект) / Java / Встановлений JRE jdk вказує на папку JDK, а не на JRE C: \ Program Files \ Java \ jdk1.8.0_74

введіть тут опис зображення


4

Я знаю, що на це вже відповіли, але я вважаю запропоновані рішення незграбними.

  1. Я не хочу встановлювати плагін лише для того, щоб уникнути помилкової помилки, яку я вважаю.
  2. Додавання jfxrt.jar як зовнішнього jar буде працювати, але погана ідея, якщо ви плануєте експортувати, оскільки jfxrt.jar також буде експортовано. Можливо, не те, що ти хочеш.

Інший варіант

У випуску "Mars" (і, можливо, більш ранніх версіях) ви можете вимкнути помилки обмеження доступу. Під

Java-> Компілятор-> Перегляд помилок / попереджень

і

"Застарілий і обмежений API"

Ви можете встановити "Заборонене посилання (правило доступу)" ігнорувати.

введіть тут опис зображення


4

Виконайте такі дії:

  1. Додайте jfxrt.jar (із інсталяційної папки) як "Зовнішній файл JAR" на вкладці "Бібліотеки".

  2. На вкладці 'Замовлення / Експорт' переконайтеся, що цей файл jfxrt.jar стоїть першим у списку.

Це спрацювало для мене.


3

У мене була та сама проблема. Я використовував рішення James_D, але його точне рішення для мене не спрацювало. Але використання **/javafx/**замість javafx/**вирішеної проблеми для мене. Сподіваюся, це допомагає.

PS: Я б опублікував це як коментар під рішенням James_D, але я щойно зареєструвався і не мав достатньої "репутації" для цього.


Це повністю вирішило проблему
Пол Кер'ю,

2

Як уже запропонував James_D, я додав правила доступу до свого файлу шляху до класу. На даний момент я видалив плагін e (fx) clipse, оскільки в ньому є помилка перевірки css (див. Як вимкнути попередження css "Невідоме властивість" в Eclipse Mars? ).

Ось мій запис у файлі classpath для контейнера 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>

0

Крок 1: Перейдіть до вашого jfxrt.jar. C: \ Program Files \ Java \ jre1.8.0_111 \ lib \ ext

Крок-2 Скопіюйте файл jfxrt.jar

Крок 3: Перейдіть до Eclipse, створіть нову папку, подібну до цієї: [Створення бібліотеки імені папки для розміщення нашого файлу jfxrt.jar] [2] [2]: https://i.stack.imgur.com/YsJ5S.png

Крок-4: Виберіть папку lib і натисніть CTRL + V, щоб вставити jfxrt.jar [Вставити jfxrt.jar] [1] [1]: https://i.stack.imgur.com/Ljogu.png

Крок 5: Клацніть правою кнопкою миші на jfxrt.jar і встановіть як Шлях побудови.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.