Вот код:
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 ')
Ответы:
Это также случилось со мной, и ответы, приведенные здесь, уже не были удовлетворительными, поэтому я провел собственное исследование.
Справочная информация: ограничения доступа Eclipse
Eclipse имеет механизм, называемый ограничениями доступа, чтобы предотвратить случайное использование классов, которые, по мнению Eclipse, не являются частью общедоступного API. Обычно Eclipse прав в этом в обоих смыслах: мы обычно не хотим использовать то, что не является частью общедоступного API. И Eclipse обычно правы относительно того, что является, а что нет частью публичного API.
проблема
Теперь могут быть ситуации, когда вы хотите использовать общедоступный не-API, например
sun.misc
(вы не должны, если вы не знаете, что делаете). И могут быть ситуации, когда Eclipse не совсем прав (это то, что случилось со мной, я просто хотел использоватьjavax.smartcardio
). В этом случае мы получаем эту ошибку в Eclipse.Решение
Решение состоит в том, чтобы изменить ограничения доступа.
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)
. Я назвал этот метод как метод объекта, который унаследовал этот метод от суперкласса. Все, что мне нужно было сделать, это добавить пакет, в котором находился суперкласс, к пакетам, импортированным моим плагином.Однако существует много разных причин ошибок, основанных на «ограничении требуемого проекта / библиотеки ». Как и в случае проблемы, описанной выше, тип, который вы используете, может иметь зависимости от пакетов, которые не экспортируются библиотекой, или может не экспортироваться сам. В этом случае вы можете попытаться отследить недостающие пакеты и экспортировать их самостоятельно, как предлагается здесь , или попробовать Правила доступа. Другие возможные сценарии включают в себя:
Это закончилось скорее как смесь проблем, связанных с ограничениями, чем фактический ответ. Но поскольку ограничение требуемых проектов является такой универсальной ошибкой, о которой следует сообщать, идеальный рецепт, вероятно, еще предстоит найти.
источник
У меня была эта проблема, потому что аспект проекта, связанный с моим проектом, был неправильной версией Java.
Чтобы это исправить, я сделал следующее:
Это перестроит ваш проект и, надеюсь, ошибка будет устранена.
источник
Нам пришлось изменить наше приложение для сборки под JDK 1.8, используя Window-> Preferences-> Java-> Installed JREs . Однако после его изменения системная библиотека JRE, указанная в обозревателе проектов, все еще оставалась неверной. Чтобы это исправить, щелкните правой кнопкой мыши на «Системная библиотека JRE [неправильный-jre-здесь]» и перейдите из среды выполнения: на «Рабочая область по умолчанию (yer-default-here)»
источник
Сработало: Свойства проекта -> ProjectFacets -> Время выполнения -> jdk1.8.0_45 -> Применить
источник
В верхней строке меню Eclipse:
источник
Если у вас возникла такая же проблема с использованием Spring Tool Suite:
Основой IDE Spring Tool Suite является, по сути, Eclipse. Я получил эту ошибку только сейчас, пытаясь использовать некоторые
com.sun.net
классы. Чтобы устранить эти ошибки и предотвратить их появление в платформе Eclipse Luna SR1 (4.4.2) STS:Тебе хорошо идти.
источник
Была такая же проблема. Вот как я это решил: Зайдите в Package Explorer. Щелкните правой кнопкой мыши Системную библиотеку JRE и перейдите в Свойства. В контейнере Classpath> Выберите JRE для пути сборки проекта выберите третий вариант (JRE рабочей области по умолчанию).
Источник: https://thenewboston.com/forum/topic.php?id=3917.
источник
Перейти к следующей настройке:
Окно -> Настройки -> Ошибки Java-компилятора / Предупреждения-устаревшая и ограниченная ссылка API-Forbidden (правила доступа)
Установите это
Warning
илиIgnore
.источник
Мы используем IBM Rational Application Developer (RAD) и столкнулись с той же проблемой.
Сообщение об ошибке:
Ограничение доступа: тип 'JAXWSProperties' не является API (ограничение для необходимой библиотеки 'C: \ IBM \ RAD95 \ jdk \ jre \ lib \ rt.jar')
Решение:
перейдите к пути сборки Java и на вкладке Библиотека удалите Системную библиотеку JRE. Затем снова Добавить библиотеку -> Системная библиотека JRE
источник
В Eclipse Mars.2 Release (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
выберите JRE ... и нажмите «Правка»: переключиться в рабочую область JRE (jdk1.8.0_77)
Работает для меня.
источник
У меня есть затмение JRE 8.112, не уверен, что это имеет значение, но я сделал следующее:
Это решило мою проблему.
источник
Я просто добавляю e (fx) clipse на торговой площадке Eclipse. Легко и просто
источник
Я использую Eclipse Neon 3. Я просто хотел использовать javafx.application.Application, поэтому я следовал ответу Кристиана Хухера выше, и это сработало. Несколько советов: правила доступа очень похожи на оператор импорта. Для меня правила доступа, которые я добавил, были "javafx / application / **". Просто замените точку в операторе импорта на косую черту, и это правило. Надеюсь, это поможет.
источник
У меня была немного другая проблема. В Project - Свойства - Библиотеки - Библиотека JRE у меня была неправильная версия библиотеки JRE. Снимите и установите актуальный, и вуаля - все
Access restriction...
предупреждения сняты.источник
Даже если это старый вопрос, для меня в Eclipse я просто щелкаю правой кнопкой мыши по папке и свойствам Src (Alt + Enter) и проверяю,
Ignore optional compile problems
удалила ли ошибка.источник
Если кто-то сталкивался с этой проблемой только в вашем инструменте CI во время работы с Maven, для меня было уловкой явное определение среды выполнения в вашем
MANIFEST.MF
.В моем случае я сделал это, вставив следующую строку в мой файл манифеста пакета OSGi:
источник