Использование JavaFX в JRE 8, ошибка ограничения доступа
При попытке использовать связанные классы 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?
Ответы
Ответ 1
С точки зрения Eclipse ошибка полностью правильная, потому что JavaFX исходит из пути класса расширения и недоступна на всех виртуальных машинах Java8 (например, ibm!).
Как указано, вы можете подавлять эти предупреждения, добавляя правила доступа или IMHO, лучшим решением является установка клипа e (fx), который делает это автоматически для вас, а помимо этого даже предоставляет инструменты для JavaFX CSS и FXML.
Вы можете захватить все в одном пакете из http://efxclipse.bestsolution.at/install.html
Ответ 2
Я собираюсь добавить еще один ответ здесь, просто чтобы указать, что я считаю самым минимальным. В моей установке 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.
Ответ 3
Я решил проблему, удалив и запустив JDK в путь сборки. Не спрашивайте меня, почему это работает.
Ответ 4
Простым способом является установка e (fx) clipse - плагина для Eclipse для поддержки JavaFX:
- Выберите Справка → Установить новое программное обеспечение
- Нажмите кнопку "Добавить", чтобы добавить следующий сайт:
- Нажмите "ОК"
- В разделе "Работа с" выберите недавно добавленный сайт "efxclipse"
- Установите флажок "e (fx) clipse - install", чтобы установить все компоненты этого выбора.
- Перейдите к следующим шагам, чтобы завершить установку.
- Перезапустите Eclipse. Если он все еще не распознает библиотеку JavaFX, перезапустите его снова.
Исходную информацию можно найти здесь: https://www.eclipse.org/efxclipse/install.html#for-the-lazy
Ответ 5
Я решил эту проблему путем осторожного использования пути построения проекта Eclipse.
- Принесите свойства вашего проекта приложения и выберите раздел "Путь сборки".
- Добавьте jre8_0\lib\ext\jfxrt.jar в качестве "внешнего JAR файла" в
Вкладка "Библиотеки".
- На вкладке "Заказ/Экспорт" убедитесь, что этот jfxrt.jar
сначала в списке.
Что делает это, делает Eclipse видеть jfxrt.jar как обычный файл сторонних сторонних JAR. Порядок важен, так что это имеет приоритет над входом в библиотеку JRE. Это тот же самый фактический JAR файл, но Eclipse видит его по-другому.
Возможно, вы захотите изменить любую конфигурацию запуска, чтобы она не использовала "экспортированную" версию jfxrt.jar; однако на практике это не изменит ситуацию.
Я сделал это с Java8 и Eclipse Luna; но я был бы уверен, что я работаю с любой комбинацией Java и Eclipse.
Ответ 6
- перейдите в путь сборки текущего проекта
в разделе "Библиотеки"
- выберите " JRE System Library [jdk1.8xxx]"
- нажмите изменить
- и выберите либо "Рабочее место по умолчанию JRE (jdk1.8xx)" ИЛИ Альтернативный JRE
- Нажмите "Готово"
- Нажмите "ОК"
Примечание: убедитесь, что в Eclipse/Preferences (НЕ проект)/Java/Installed JRE, что jdk указывает на папку JDK, а не JRE C:\Program Files\Java\jdk1.8.0_74
Ответ 7
Выполните следующие действия:
Добавьте файл jfxrt.jar (из папки установки) в качестве "внешнего файла JAR" на вкладке "Библиотеки".
На вкладке "Порядок/Экспорт" убедитесь, что этот файл jfxrt.jar находится первым в списке.
Это сработало для меня.
Ответ 8
Я знаю, что уже был дан ответ, но я нахожу предлагаемые решения неуклюжими.
- Я не хочу устанавливать плагин, чтобы избежать того, что я считаю недопустимой ошибкой.
- Добавление jfxrt.jar в качестве внешнего jar будет работать, но это плохая идея, если вы планируете делать экспорт, потому что jfxrt.jar также будет экспортироваться. Наверное, не то, что вы хотите.
Другой вариант
В выпуске "Марс" (и, возможно, более ранних версиях) вы можете отключить ошибки ограничений доступа. Под
Java- > Compiler- > Просмотр ошибок/предупреждений
и
"Устаревший и ограниченный API"
вы можете установить "Запрещенную ссылку (правило доступа)" для игнорирования.
Ответ 9
Поскольку James_D уже предложил, я добавил правила доступа в свой файл pathpath. На данный момент я удалил плагин e (fx) clipse, потому что у него есть ошибка проверки CSS (см. Как отключить предупреждение css и "Неизвестное свойство" на Eclipse Mars?).
Вот моя запись в файле pathpath для контейнера 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>
Ответ 10
У меня была та же проблема. Я использовал решение James_D, но его точное решение не сработало для меня. Но использование **/javafx/**
вместо javafx/**
решило проблему для меня. Надеюсь, что это поможет.
PS: Я бы разместил это как комментарий в решении James_D, но я только что зарегистрировался и не имел достаточной "репутации" для этого.
Ответ 11
Шаг 1. Перейдите к jfxrt.jar. C:\Program Files\Java\jre1.8.0_111\lib\ext
Шаг-2 Скопируйте файл jfxrt.jar
Шаг 3: перейдите в Eclipse, создайте новую папку следующим образом: [Создание имени папки lib для размещения нашего файла 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 и установите как путь сборки.