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