it-swarm.com.ru

Ограничение доступа: тип "Приложение" не является 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 ')

147
www139

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

Справочная информация: Eclipse ограничения доступа

В Eclipse есть механизм ограничения доступа для предотвращения случайного использования классов, которые, по мнению Eclipse, не являются частью общедоступного API. Обычно Eclipse прав в этом, в обоих смыслах: мы обычно не хотим использовать что-то, что не является частью публичного API. И Eclipse обычно правы относительно того, что является, а что нет частью публичного API.

Проблема

Теперь могут быть ситуации, когда вы хотите использовать общедоступный не-API, например, Sun.misc (не следует, если вы не знаете, что делаете). И могут быть ситуации, когда Eclipse не совсем прав (вот что случилось со мной, я просто хотел использовать javax.smartcardio). В этом случае мы получаем эту ошибку в Eclipse.

Решение

Решение состоит в том, чтобы изменить ограничения доступа. 

  • Перейдите в свойства вашего Java-проекта,
    • то есть, выбрав «Свойства» в контекстном меню проекта в «Проводнике пакетов». 
  • Перейдите в «Путь сборки Java», вкладка «Библиотеки». 
  • Разверните запись библиотеки
  • выбрать
    • «Правила доступа», 
    • «Редактировать ...» и 
    • «Добавить ...» a «Разрешение: Доступно» с соответствующим шаблоном правила. Для меня это было "javax/smartcardio/**", для вас это могло бы быть "com/Apple/eawt/**".
221
Christian Hujer

У меня была такая же проблема. Когда я изначально создал проект Java в Eclipse, я указал JRE 8. Когда я вошел в путь сборки проекта и отредактировал Системную библиотеку JRE, была выбрана среда выполнения Java 8. Когда я решил использовать «Alernate JRE» (все еще Java 8), это исправило ошибку для меня.

70
Amber

Добавление доступного разрешения javafx в Eclipse oxygen Перейдите в проект> свойства> путь сборки Java> библиотеки>, затем разверните библиотеки и дважды щелкните> Правила доступа, для которых вы установили разрешение Разрешение: Доступно Правильный образец: javafx/**

 enter image description here

 enter image description here

 enter image description here

49
vidyakumargv

Начнем с того, что (and unrelated) создание экземпляра класса Application самостоятельно не является его предназначением. Из того, что можно прочитать из его source , вы, скорее всего, будете использовать статический экземпляр, возвращаемый getApplication().

Теперь перейдем к сообщениям об ошибках Eclipse. Недавно я столкнулся с подобной проблемой: Access restriction: The method ... is not API (restriction on required project). Я назвал этот метод как метод объекта, который унаследовал этот метод от суперкласса. Все, что мне нужно было сделать, это добавить пакет, в котором находился суперкласс, к пакетам, импортированным моим плагином.

Однако существует множество причин возникновения ошибок, основанных на "ограничении для требуемого проекта/библиотеки". Как и в случае проблемы, описанной выше, тип, который вы используете, может иметь зависимости от пакетов, которые не экспортируются библиотекой, или может не экспортироваться сам. В этом случае вы можете попытаться отследить недостающие пакеты и экспортировать их самостоятельно, как предложено здесь , или попробовать Правила доступа. Другие возможные сценарии включают в себя:

  • Eclipse хочет, чтобы вы не использовали доступные пакеты, которые не являются частью общедоступного API Java (решение 1 , 2 )
  • Зависимости удовлетворяются несколькими источниками, версии противоречивы и т.д. (Решение 1 , 2 , 3 )
  • Eclipse использует JRE, где необходим JDK (что может быть в данном случае, исходя из ваших ошибок; solution ), или версия JRE/JDK в пути сборки проекта не является правильной 

Это закончилось скорее как смесь проблем, связанных с ограничениями, чем фактический ответ. Но поскольку ограничение требуемых проектов является такой универсальной ошибкой, о которой следует сообщать, идеальный рецепт, вероятно, еще не найден.

22
J. Katzwinkel

У меня была эта проблема, потому что аспект проекта, связанный с моим проектом, был неправильной версией Java.

Чтобы это исправить, я сделал следующее:

  1. Щелкните правой кнопкой мыши по проекту и выберите «Свойства».
  2. Выберите «Фасеты проекта» и измените версию Java на версию, превышающую 1.4.
  3. Нажмите [Применить] 

Это перестроит ваш проект и, надеюсь, ошибка будет устранена.

16
Kiriya Keat

Сработало: Свойства проекта -> ProjectFacets -> Время выполнения -> jdk1.8.0_45 -> Применить

13
Kamila O

В верхней строке меню Eclipse:

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> 
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
10
Phil Long

Если у вас возникла та же проблема с использованием Spring Tool Suite:

В основе IDE Spring Tool Suite фактически лежит Eclipse. Я получил эту ошибку только сейчас, пытаясь использовать некоторые классы com.Sun.net. Чтобы устранить эти ошибки и предотвратить их появление в платформе Eclipse Luna SR1 (4.4.2) STS: 

  • Перейдите к Проекту> Свойства 
  • Раскройте заголовок Java Compiler
  • Нажмите на ошибки/предупреждения 
  • Расширить устаревший и ограниченный API
  • Рядом с «Запрещенная ссылка (правила доступа)» выберите «игнорировать» 
  • Рядом с «Не рекомендуется ссылаться (правила доступа)» выберите «игнорировать» 

Тебе хорошо идти.

9
Grandclosing

Была такая же проблема. Вот как я это решил: Перейдите в Package Explorer. Щелкните правой кнопкой мыши Системную библиотеку JRE и перейдите в Свойства. В контейнере Classpath> Выберите JRE для пути сборки проекта выберите третий вариант (JRE рабочей области по умолчанию).

Источник: https://thenewboston.com/forum/topic.php?id=3917

5
Nishant_Singh

Перейти к следующей настройке:

Окно -> Настройки -> Ошибки Java-компилятора/Предупреждения-устаревшая и ограниченная ссылка API-Forbidden (правила доступа)

Установите значение Warning или Ignore.

4
cxj

Нам пришлось изменить наше приложение для сборки под JDK 1.8, используя Window-> Preferences-> Java-> Installed JREs. Однако после его изменения системная библиотека JRE, указанная в обозревателе проектов, все еще оставалась неверной. Чтобы это исправить, щелкните правой кнопкой мыши на «Системная библиотека JRE [неправильный-jre-здесь]» и перейдите из среды выполнения: на «Рабочее пространство по умолчанию (yer-default-here)»

 enter image description here

4
Dinsdale

В Eclipse Mars.2 Release (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
выберите JRE ... и нажмите Редактировать: переключиться в рабочую область JRE (jdk1.8.0_77) 

Работает для меня.

3
Sven

У меня есть Eclipse JRE 8.112, но я не уверен, что это важно, но я сделал следующее:

  1. Щелкните правой кнопкой мыши на папке моих проектов
  2. спустился в свойства и нажал
  3. нажал на папку пути сборки Java
  4. оказавшись внутри, я был в порядке и экспорта
  5. Я проверил системную библиотеку JRE [jre1.8.0_112]
  6. затем переместил его выше другой системной библиотеки JRE (не уверен, что это имеет значение)
  7. затем нажал ОК

Это решило мою проблему. 

2
quasar-light

Я просто добавляю e (fx) clipse на Eclipse marketplace. Легко и просто

1
jessie

У меня была немного другая проблема. В Project - Свойства - Библиотеки - Библиотека JRE у меня была неправильная версия библиотеки JRE. Снимите и установите актуальный, и вуаля - все предупреждения Access restriction... удалены.

0
Gangnus

Мы используем IBM Rational Application Developer (RAD) и столкнулись с той же проблемой.

Сообщение об ошибке:  

Ограничение доступа: тип 'JAXWSProperties' не является API (ограничение для необходимой библиотеки 'C:\IBM\RAD95\jdk\jre\lib\rt.jar')

Решение:

перейдите к пути сборки Java и на вкладке Библиотека удалите Системную библиотеку JRE. Затем снова Добавить библиотеку -> Системная библиотека JRE

0
Jonas_Hess

Я использую Eclipse Neon 3. Я просто хотел использовать javafx.application.Application, поэтому я следовал ответу Кристиана Хухера выше, и это сработало. Несколько советов: правила доступа очень похожи на оператор импорта. Для меня я добавил следующие правила доступа: «javafx/application/**». Просто замените точку в операторе импорта косой чертой, и это правило. Надеюсь, это поможет.

0
Tony S