Использование JavaFX в JRE 8, Ошибка "ограничение доступа"



при попытке использовать связанные классы javafx в моем новом проекте java 8 я получаю ошибку ограничения доступа от eclipse. До сих пор единственное "решение", которое я смог найти, - это сказать eclipse игнорировать ограничение доступа, но меня это не устраивает.
Пример ошибки:



Access restriction: The type Pane is not accessible due to 
restriction on required library C:Program FilesJavajre8_0libextjfxrt.jar


Я использую Eclipse Kepler с патчем Eclipse JDT для java 8.



это, кажется, проблема, связанная с тем, что JavaFX не является частью выполнения JavaSE окружающая среда.



Я сейчас жестко запутался, как по http://en.wikipedia.org/wiki/JavaFX javaFX является частью JavaSE. Возможно ли, что Eclipse не признает, что это часть javaSE?

727   11  

11 ответов:

с точки зрения Eclipse ошибка полностью верна, потому что JavaFX поступает из пути расширения classpath и не доступен на всех виртуальных машинах Java8 (например, ibm!).

Как указано, Вы можете подавить эти предупреждения с помощью add access-rules или IMHO лучшим решением является установка e(fx)clipse, который делает это автоматически для вас, а кроме того, даже предоставляет вам инструменты для JavaFX CSS и FXML.

вы можете захватить все в одном пакете от http://efxclipse.bestsolution.at/install.html

Я собираюсь добавить еще один ответ здесь, просто представить, что я думаю-это самый минимальный подход. В моей настройке Eclipse у меня установлен e (fx)clipse, который обеспечивает одно исправление для этого, а также предоставляет множество полезных функций разработки, которые вы почти наверняка захотите, если вы пишете приложения JavaFX. Это, пожалуй, самый практичный подход. Если по какой-то причине вам не нужен этот плагин, решение, описанное в этом ответе, устранит проблему с наименьшим количеством другие побочные эффекты.

Так минимальный исправить это, чтобы разрешить доступ к классам в этом файле jar (и только в этом jar папка.) Для этого щелкните правой кнопкой мыши на проекте и откройте диалоговое окно свойства проекта. Выберите " путь сборки "в левой панели и перейдите на вкладку" библиотеки". Вы увидите запись "JRE System Library". Разверните эту запись, и вы увидите подцентру "правила доступа":

enter image description here

выберите пункт" правила доступа "и нажмите кнопку"Изменить". нажать кнопку add."

enter image description here

В разделе "разрешение" выберите "доступно" и в разделе "шаблон правил" введите javafx/**:

enter image description here

Нажмите кнопку ОК, чтобы выйти из всех диалоговых окон.

Эта настройка позволит получить доступ ко всем классам в любых пакетах начиная javafx., но сохранит правило в папке ext для всех других классов и является "минимальным" в этом смысле.

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

Я решил проблему, удалив и прочитав JDK в путь сборки. Не спрашивайте меня, почему это работает.

Я решил эту проблему с помощью некоторого тщательного использования пути сборки проекта Eclipse.

  • откройте свойства проекта вашего приложения и выберите раздел "путь сборки".
  • добавьте jre8_0\lib\ext\jfxrt.jar как "внешний файл JAR" в Вкладка "библиотеки".
  • на вкладке "порядок/экспорт" убедитесь, что это jfxrt.фляги первый в списке.

то, что это делает, заставляет Eclipse видеть jfxrt.баночка как раз такая регулярные 3-й файл-участник банку. Порядок важен, так что это имеет приоритет над записью в системной библиотеке JRE. Это тот же самый фактический файл JAR, но Eclipse видит его по-другому.

вы можете изменить любые конфигурации запуска, чтобы он не использовал "экспортированную" версию jfxrt.jar; однако в практическом плане это не будет иметь значения.

Я сделал это с Java8 и Eclipse Luna; но Принципал бы я уверен, что работать с любой комбинацией Java и Eclipse.

простой способ-установить e (fx)clipse-плагин для Eclipse для поддержки JavaFX:

  1. Выберите Справка -> Установить Новое Программное Обеспечение
  2. нажать кнопку Добавить, чтобы добавить следующий сайт:
  3. Нажмите кнопку ОК
  4. В разделе "Работа с" выберите недавно добавленный сайт "efxclipse"
  5. установите флажок "e (fx)clipse-install", чтобы установить все компоненты этого выбора
  6. перейти к следующим шагам, чтобы завершить установку
  7. перезапустите Eclipse. Если он все еще не распознает библиотеку JavaFX, перезапустите ее снова.

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

  • перейти к построить путь текущего проекта

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

  • выбираем " системная библиотека JRE [jdk1.8ххх]"
  • клик редактировать
  • и выберите либо " рабочее пространство по умолчанию JRE (jdk1.8xx)" или альтернативный JRE
  • Нажмите кнопку Готово
  • Нажмите кнопку ОК

enter image description here

Примечание: убедитесь, что в Eclipse / Preferences (не проект) / Java / установленная JRE, что jdk указывает на папку JDK, а не JRE C:\Program файлы\Java\jdk1.8. 0_74

enter image description here

выполните следующие действия:
1. Добавьте jfxrt.jar (из вашей папки установки) как "внешний файл JAR" на вкладке "библиотеки".

  1. на вкладке "порядок / экспорт" убедитесь, что это jfxrt.jar занимает первое место в списке.

это работает для меня

Я знаю, что на это уже ответили, но я нахожу предлагаемые решения неуклюжими.

  1. Я не хочу устанавливать плагин, чтобы избежать того, что я считаю недопустимой ошибкой.
  2. добавление jfxrt.jar как внешний jar будет работать, но это плохая идея, если вы планируете делать экспорт, потому что jfxrt.jar также будет экспортироваться. Наверное, не то, что ты хочешь.

другой вариант

в релизе "Mars" (и, возможно, ранее версии) вы можете отключить ошибки ограничения доступа. Под

Java - > компилятор - >ошибки / предупреждения view

и

"устаревший и ограниченный API"

вы можете установить "запрещенная ссылка (правило доступа)" в игнор.

enter image description here

Как 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>

у меня была та же проблема. Я использовал решение James_D, но его точное решение не сработало для меня. Но с помощью **/javafx/** вместо javafx/** решил проблему для меня. Надеюсь, это поможет.

PS: Я бы разместил это в качестве комментария под решением James_D, но я только что зарегистрировался и не имел достаточной "репутации" для этого.

Шаг-1: Перейдите к вашему jfxrt.сосуд. C:\Program файлы\Java\jre1.8. 0_111\lib\ext

Шаг 2 скопируйте файл jfxrt.банку

Шаг 3: перейдите в Eclipse,создайте новую папку, как это: [Создать папку с именем lib, чтобы положить наши jfxrt.jar file][2] [2]: https://i.stack.imgur.com/YsJ5S.png

Шаг-4: Выберите папку lib и нажмите CTRL+V, чтобы вставить jfxrt.сосуд [Вставьте jfxrt.jar][1] [1]: https://i.stack.imgur.com/Ljogu.png

Шаг 5: щелкните правой кнопкой мыши на jfxrt.jar и установить как построить путь.

Comments

    Ничего не найдено.