Использование 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

Выполните следующие действия:

  1. Добавьте файл jfxrt.jar (из папки установки) в качестве "внешнего файла JAR" на вкладке "Библиотеки".

  2. На вкладке "Порядок/Экспорт" убедитесь, что этот файл 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 и установите как путь сборки.