Ограничение доступа: Тип "Приложение" - это не API (ограничение на требуемую библиотеку rt.jar)
Вот код:
package mscontroller;
import javax.swing.*;
import com.apple.eawt.Application;
public class Main {
public static void main(String[] args)
{
Application app = new Application();
app.setEnabledAboutMenu(true);
AMEListener listener = new AMEListener();
app.addApplicationListener(listener);
JFrame mainFrame = new JFrame("Application Menu Example");
mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
}
}
вот ошибка:
Exception in thread "main" java.lang.Error: Unresolved compilation
problems: Access restriction: The type 'Application' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The constructor 'Application()' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The type 'Application' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The method
'Application.setEnabledAboutMenu(boolean)' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
AMEListener cannot be resolved to a type AMEListener cannot be
resolved to a type
at mscontroller.Main.main(Main.java:9)
затмение говорит это:
Ограничение доступа: тип "Приложение" не является API (ограничение для необходимой библиотеки '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Ответы
Ответ 1
Это также случилось со мной, и ответы, приведенные здесь, уже не были удовлетворительными, поэтому я провел собственное исследование.
Справочная информация: ограничения доступа Eclipse
Eclipse имеет механизм, называемый ограничениями доступа, чтобы предотвратить случайное использование классов, которые, по мнению Eclipse, не являются частью общедоступного API. Обычно Eclipse прав в этом в обоих смыслах: мы обычно не хотим использовать что-то, что не является частью публичного API. И Eclipse обычно правы относительно того, что является, а что нет частью публичного API.
проблема
Теперь могут быть ситуации, когда вы хотите использовать общедоступный не-API, такой как sun.misc
(не следует, если вы не знаете, что делаете). И могут быть ситуации, когда Eclipse не совсем прав (то, что со мной произошло, я просто хотел использовать javax.smartcardio
). В этом случае мы получаем эту ошибку в Eclipse.
Решение
Решение состоит в том, чтобы изменить ограничения доступа.
- Перейдите в свойства вашего проекта Java,
- т.е. выбрав "Свойства" в контекстном меню проекта в "Обозревателе пакетов".
- Перейдите в "Путь сборки Java", вкладка "Библиотеки".
- Разверните запись библиотеки
- Выбрать
- "Правила доступа",
- "Редактировать..." и
- "Добавить..." a "Разрешение: Доступно" с соответствующим шаблоном правила. Для меня это было "
javax/smartcardio/**
", для вас это могло бы быть " com/apple/eawt/**
".
Ответ 2
У меня была такая же проблема. Когда я изначально создал проект java в Eclipse, я указал JRE 8. Когда я вошел в путь создания проекта и отредактировал JRE System Library, была выбрана среда исполнения Java 8. Когда я решил использовать "Alernate JRE" (все еще java 8), он исправил ошибку для меня.
Ответ 3
Добавление javafx доступного разрешения в eclipse oxygen
перейдите в проект > свойствa > путь сборки Java > библиотеки > затем разверните библиотеки и дважды щелкните по > Правилам доступа там, где вы устанавливаете разрешение
Разрешение: Доступно
Правило Шаблон: javafx/**
![введите описание изображения здесь]()
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Ответ 4
Начнем с (и не связанного), создание экземпляра класса Application
самостоятельно, похоже, не является его предполагаемым использованием. Исходя из того, что можно прочитать из его источника, вы, скорее всего, будете использовать статический экземпляр, возвращаемый getApplication()
.
Теперь давайте перейдем к сообщениям об ошибках Eclipse. Недавно я столкнулся с похожей проблемой: Access restriction: The method... is not API (restriction on required project)
. Я назвал этот метод как метод объекта, который унаследовал этот метод от суперкласса. Все, что мне нужно было сделать, это добавить пакет, в котором находился суперкласс, к пакетам, импортированным моим плагином.
Однако существует много разных причин ошибок, основанных на "ограничении требуемого проекта/библиотеки". Подобно проблеме, описанной выше, тип, который вы используете, может иметь зависимости от пакетов, которые не экспортируются библиотекой, или может не экспортироваться сам. В этом случае вы можете попытаться отследить недостающие пакеты и экспортировать их самостоятельно, как предлагается здесь, или попробовать Правила доступа. Другие возможные сценарии включают в себя:
- Eclipse хочет запретить вам использовать доступные пакеты, которые не являются частью общедоступного API Java (решение 1, 2)
- Зависимости удовлетворяются несколькими источниками, версии противоречивы и т.д. (Решение 1, 2, 3)
- Eclipse использует JRE, где необходим JDK (что может быть здесь, исходя из того, что говорят ваши ошибки; решение), или версия JRE/JDK в пути сборки проекта не является правильной
Это закончилось скорее как смесь проблем, связанных с ограничениями, чем фактический ответ. Но поскольку ограничение требуемых проектов является такой универсальной ошибкой, о которой следует сообщать, идеальный рецепт, вероятно, еще предстоит найти.
Ответ 5
У меня была эта проблема, потому что фасет проекта, связанный с моим проектом, был неправильной версией Java.
Чтобы исправить это, я сделал следующее:
- Щелкните правой кнопкой мыши по проекту и выберите "Свойства"
- Выберите "Границы проекта" и измените версию java на нечто большее 1.4.
- Нажмите [Применить]
Это приведет к восстановлению вашего проекта и, надеюсь, ошибка будет решена.
Ответ 6
Работало: Свойства проекта → ProjectFacets → Runtimes → jdk1.8.0_45 → Применить
Ответ 7
В верхней строке меню Eclipse:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
Ответ 8
Нам пришлось изменить наше приложение для сборки под JDK 1.8, используя Window-> Предпочтения → Java-> Установленные JRE. Однако после его изменения системная библиотека JRE, указанная в обозревателе проектов, все еще оставалась неверной. Чтобы это исправить, щелкните правой кнопкой мыши на "Системная библиотека JRE [неправильный-jre-здесь]" и перейдите из среды выполнения: на "Рабочая область по умолчанию (yer-default-here)"
![enter image description here]()
Ответ 9
Если у вас такая же проблема, используя Spring Tool Suite:
Spring Набор инструментов, лежащий в основе IDE, фактически является Eclipse. Я получил эту ошибку только сейчас, пытаясь использовать некоторые классы com.sun.net
. Чтобы удалить эти ошибки и предотвратить их появление на платформе STS Eclipse Luna SR1 (4.4.2):
- Перейдите к проекту > Свойства
- Развернуть заголовок компилятора Java
- Нажмите "Ошибки/предупреждения"
- Развернуть устаревший и ограниченный API
- Рядом с "Запрещенная ссылка (правила доступа)" выберите "игнорировать"
- Рядом с "Отклоненная ссылка (правила доступа)" выберите "игнорировать"
Вы хорошо пойдете.
Ответ 10
Была такая же проблема. Вот как я это решил: Зайдите в Package Explorer. Щелкните правой кнопкой мыши Системную библиотеку JRE и перейдите в Свойства. В контейнере Classpath> Выберите JRE для пути сборки проекта выберите третий вариант (JRE рабочей области по умолчанию).
Источник: https://thenewboston.com/forum/topic.php?id=3917.
Ответ 11
Перейдите к следующей настройке:
Окно → Настройки → Java-Compiler-Errors/Warnings-Устаревшие и ограниченные API-запрещенные ссылки (правила доступа)
Установите значение Warning
или Ignore
.
Ответ 12
В выпуске Eclipse Mars.2 (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
выберите JRE... и нажмите "Изменить": перейдите в рабочую область JRE (jdk1.8.0_77)
Работает для меня.
Ответ 13
У меня есть eclipse JRE 8.112, не уверен, что это важно, но я сделал это:
- Щелкните правой кнопкой мыши папку моих проектов
- перешел к свойствам и нажал
- щелкните по папке пути сборки java
- один раз внутри, я был в порядке и экспортировал
- Я проверил системную библиотеку JRE [jre1.8.0_112]
- затем переместил его вверх над другой библиотекой JRE (не уверен, что это имело значение)
- затем нажмите ok
Это решило мою проблему.
Ответ 14
Мы используем IBM Rational Application Developer (RAD) и столкнулись с той же проблемой.
Сообщение об ошибке:
Ограничение доступа: тип 'JAXWSProperties' не является API (ограничение для необходимой библиотеки 'C:\IBM\RAD95\jdk\jre\lib\rt.jar')
Решение:
перейдите к пути сборки Java и на вкладке Библиотека удалите Системную библиотеку JRE. Затем снова Добавить библиотеку → Системная библиотека JRE
Ответ 15
Я просто добавляю e (fx) клипсе на рынке eclipse. Легко и просто
Ответ 16
попробуйте следующее:
щелкните правой кнопкой мыши по проекту (в затмении) → выберите "Границы проекта" (левая панель) → выберите "java" (центральная панель) → выберите "Runtimes" (правая панель).
там, убедитесь, что "Apache Tomcat" выбран, если нет, затем выберите его, нажмите "применить", а затем "ok"
Ответ 17
Я использую eclipse neon 3. Я просто хотел использовать javafx.application.Application, поэтому я последовал за христианом Хужером, и это сработало. Несколько советов: правила доступа очень похожи на оператор импорта. Для меня правила доступа, которые я добавил, были "javafx/application/**". Просто замените точку в заявлении импорта на прямую косую черту и это правило. Надеюсь, что это поможет.
Ответ 18
У меня была немного другая проблема. В Project - Свойства - Библиотеки - Библиотека JRE у меня была неправильная версия библиотеки JRE. Снимите и установите актуальный, и вуаля - все Access restriction...
предупреждений нет.
Ответ 19
Если кто-то сталкивался с этой проблемой только в вашем инструменте CI во время работы с Maven, для меня было уловкой явное определение среды выполнения в вашем MANIFEST.MF
.
В моем случае я сделал это, вставив следующую строку в файл манифеста пакета OSGi:
Bundle-RequiredExecutionEnvironment: JavaSE-1.8