Ограничение доступа: тип "Приложение" не является 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')
22 ответа
Это также случилось со мной, и ответы, приведенные здесь, уже не были удовлетворительными, поэтому я провел собственное исследование.
Справочная информация: ограничения доступа Eclipse
Eclipse имеет механизм, называемый ограничениями доступа, чтобы предотвратить случайное использование классов, которые, по мнению Eclipse, не являются частью общедоступного API. Обычно Eclipse прав в этом в обоих смыслах: мы обычно не хотим использовать что-то, что не является частью публичного API. И Eclipse обычно правы относительно того, что является, а что нет частью публичного API.
проблема
Теперь могут быть ситуации, когда вы хотите использовать общедоступный не-API, например, sun.misc
(Вы не должны, если вы не знаете, что делаете). И могут быть ситуации, когда Eclipse не совсем прав (вот что случилось со мной, я просто хотел использовать javax.smartcardio
). В этом случае мы получаем эту ошибку в Eclipse.
Решение
Решение состоит в том, чтобы изменить ограничения доступа.
- Перейдите в свойства вашего проекта Java,
- т.е. выбрав "Свойства" в контекстном меню проекта в "Проводнике пакетов".
- Перейдите в "Путь сборки Java", вкладка "Библиотеки".
- Разверните запись библиотеки
- Выбрать
- "Правила доступа",
- "Редактировать..." и
- "Добавить..." a "Разрешение: Доступно" с соответствующим шаблоном правила. Для меня это было
javax/smartcardio/**
"для вас это может быть вместо"com/apple/eawt/**
".
У меня была такая же проблема. Когда я изначально создал проект Java в Eclipse, я указал JRE 8. Когда я вошел в путь сборки проекта и отредактировал Системную библиотеку JRE, была выбрана среда выполнения Java 8. Когда я решил использовать "Alernate JRE" (все еще Java 8), это исправило ошибку для меня.
Для добавления доступного разрешения javafx в eclipse oxygen перейдите в проект> свойства> путь сборки java> библиотеки>, затем разверните библиотеки и дважды щелкните мышью на> "Правила доступа", для которых вы устанавливаете разрешение. Разрешение: Шаблон правила доступа: javafx/**
Для начала (и не связанных), создание 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 в пути сборки проекта не является правильной
Это закончилось скорее как смесь проблем, связанных с ограничениями, чем фактический ответ. Но поскольку ограничение требуемых проектов является такой универсальной ошибкой, о которой следует сообщать, идеальный рецепт, вероятно, еще предстоит найти.
Нам пришлось изменить наше приложение для сборки под JDK 1.8, используя Window-> Preferences-> Java-> Installed JREs. Однако после его изменения системная библиотека JRE, указанная в обозревателе проектов, все еще оставалась неверной. Чтобы это исправить, щелкните правой кнопкой мыши на "Системная библиотека JRE [неправильный-jre-здесь]" и перейдите из среды выполнения: на "Рабочее пространство по умолчанию (yer-default-here)"
У меня была эта проблема, потому что аспект проекта, связанный с моим проектом, был неправильной версией Java.
Чтобы это исправить, я сделал следующее:
- Щелкните правой кнопкой мыши по проекту и выберите "Свойства".
- Выберите "Фасеты проекта" и измените версию Java на версию, превышающую 1.4.
- Нажмите [Применить]
Это перестроит ваш проект и, надеюсь, ошибка будет устранена.
Сработало: Свойства проекта -> ProjectFacets -> Время выполнения -> jdk1.8.0_45 -> Применить
В верхней строке меню Eclipse:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
Если у вас возникла такая же проблема с использованием Spring Tool Suite:
Основой IDE Spring Tool Suite является, по сути, Eclipse. Я получил эту ошибку только сейчас, пытаясь использовать некоторые com.sun.net
классы. Чтобы устранить эти ошибки и предотвратить их появление в платформе Eclipse Luna SR1 (4.4.2) STS:
- Перейдите к Проекту> Свойства
- Раскройте заголовок Java Compiler
- Нажмите на ошибки / предупреждения
- Расширить устаревший и ограниченный API
- Рядом с "Запрещенная ссылка (правила доступа)" выберите "игнорировать"
- Рядом с "Не рекомендуется ссылаться (правила доступа)" выберите "игнорировать"
Тебе хорошо идти.
Была такая же проблема. Вот как я это решил: Зайдите в Package Explorer. Щелкните правой кнопкой мыши Системную библиотеку JRE и перейдите в Свойства. В контейнере Classpath> Выберите JRE для пути сборки проекта выберите третий вариант (JRE рабочей области по умолчанию).
Мы используем IBM Rational Application Developer (RAD) и столкнулись с той же проблемой.
Сообщение об ошибке:
Ограничение доступа: тип 'JAXWSProperties' не является API (ограничение для необходимой библиотеки 'C:\IBM\RAD95\jdk\jre\lib\rt.jar')
Решение:
перейдите к пути сборки Java и на вкладке Библиотека удалите Системную библиотеку JRE. Затем снова Добавить библиотеку -> Системная библиотека JRE
Перейти к следующей настройке:
Окно -> Настройки -> Ошибки Java-компилятора / Предупреждения-устаревшая и ограниченная ссылка API-Forbidden (правила доступа)
Установите это Warning
или же Ignore
,
Даже если это старый вопрос, для меня в Eclipse я просто щелкаю правой кнопкой мыши папку и свойства Src (Alt+Enter) и проверяю наличиеIgnore optional compile problems
удалил ошибку.
В Eclipse Mars.2 Release (4.5.2):Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
выберите JRE... и нажмите Редактировать: переключиться в рабочую область JRE (jdk1.8.0_77)
Работает для меня.
Удалите существующую / настроенную системную библиотеку: Eclipse (IDE) -> Project Explorer -> Project Name-> (Option) Build Path -> Configure Build Path -> Java Build Path -> Libraries -> (Select) JRE System Library [(Для меня)jre1.8.0_231] -> Удалить.
В настоящее время вы находитесь в том же месте: Eclipse (IDE) -> Project Explorer -> Project Name-> (Option) Build Path -> Configure Build Path -> Java Build Path -> Libraries
Теперь снова добавьте ту же системную библиотеку: Добавить библиотеку -> Системная библиотека JRE -> Рабочая область по умолчанию JRE ((для меня)jre1.8.0_231) -> Готово -> Применить -> Закрыть.
Теперь подождите, чтобы закончить.
У меня есть затмение JRE 8.112, не уверен, что это имеет значение, но то, что я сделал, было так:
- Щелкните правой кнопкой мыши на папке моих проектов
- спустился в свойства и нажал
- нажал на папку пути сборки Java
- Оказавшись внутри, я был в порядке и экспорта
- Я проверил системную библиотеку JRE [jre1.8.0_112]
- затем переместил его выше другой системной библиотеки JRE (не уверен, что это имеет значение)
- затем нажал ОК
Это решило мою проблему.
Я просто добавляю e(fx)clipse на торговой площадке Eclipse. Легко и просто
У меня сработало добавление пакета с ограниченным доступом в файл MANIFEST.MF. В Eclipse ошибки «Доступ ограничен» отображались на вкладке «Проблемы» для нескольких файлов. Я просто щелкал правой кнопкой мыши по каждой ошибке, нажимал «Быстрое исправление» и выбирал «Добавить '[пакет]' к импортированным пакетам».
Я использую Eclipse Neon 3. Я просто хотел использовать javafx.application.Application, поэтому я следовал ответу Кристиана Хухера выше, и это сработало. Несколько советов: правила доступа очень похожи на оператор импорта. Для меня я добавил следующие правила доступа: "javafx/application/**". Просто замените точку в операторе импорта косой чертой, и это правило. Надеюсь, это поможет.
Если у кого-то возникает эта проблема только в вашем инструменте CI при запуске maven, уловка для меня заключалась в том, чтобы явно определить среду выполнения в вашем MANIFEST.MF
.
В моем случае я сделал это, вставив следующую строку в свой файл манифеста пакета OSGi:
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
У меня была немного другая проблема. В Project - Свойства - Библиотеки - Библиотека JRE у меня была неправильная версия библиотеки JRE. Снимите и установите актуальный, а вуаля - все Access restriction...
предупреждения отсутствуют.
Я столкнулся с той же ошибкой на Eclipse
4.20.0
с JRE 1.8. Чтобы избавиться от этой ошибки компиляции, сделайте следующее:
Project --> Properties --> Java Compiler --> Errors/Warnings --> Deprecated and Restricted API --> Forbidden Reference (access rules) --> ignore