访问限制:“应用程序”types不是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) 

月蚀说这个:

 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') 

这也发生在我身上,这里给出的答案已经不令人满意,所以我做了自己的研究。

背景:Eclipse 访问限制

Eclipse有一个称为访问限制的机制,可以防止您意外地使用Eclipse认为不属于公共API的类。 通常情况下,Eclipse在这方面是正确的:我们通常不想使用不属于公共API的东西。 而Eclipse通常是正确的,什么是和什么不是公共API的一部分。

问题

现在,可能会出现这样的情况:您想使用公共Non-API,比如sun.misc (除非您知道自己在做什么,否则不应该)。 而且可能会出现这样的情况,Eclipse不太正确(这就是发生在我身上的事情,我只是想用javax.smartcardio )。 在这种情况下,我们在Eclipse中得到这个错误。

解决scheme是更改访问限制。 转到Java项目的属性,即通过在“包资源pipe理器”中的项目的上下文菜单中select“属性”。 在那里,转到“Java Build Path”,标签“Libraries”。 在这里,展开库条目,select“访问规则”,“编辑…”和“添加…”一个“分辨率:可访问”与相应的规则模式。 对于我来说这是“ javax/smartcardio/** ”,对于你来说,它可能是“ com/apple/eawt/** ”。

我遇到了同样的问题。 当我最初在Eclipse中创buildJava项目时,我指定了JRE 8.当我进入项目的构buildpath并编辑JRE系统库时,select了Java 8执行环境。 当我select使用“Alernate JRE”(仍然是java 8)时,它为我解决了这个错误。

开始( 和无关 ),自己实例化Application类似乎并不是它的预期用途。 从源代码中可以看出,你应该使用getApplication()返回的静态实例。

现在让我们来看看Eclipse报告的错误。 我最近碰到类似的问题: Access restriction: The method ... is not API (restriction on required project) 。 我将所讨论的方法称为从超类inheritance该方法的对象的方法。 我所要做的就是将超类所在的包添加到我的插件导入的包中。

但是,根据“所需项目/图书馆的限制” ,导致错误的原因有很多。 类似于上面描述的问题,您正在使用的types可能依赖于不由库导出的软件包,也可能不会自行导出。 在这种情况下,您可以尝试追踪丢失的包,并按照这里所build议的将其导出,或尝试访问规则。 其他可能的情况包括:

  • Eclipse希望避免使用不属于公共Java API的可用包(解决scheme1,2 )
  • 依赖性由多个来源满足,版本冲突等(解决scheme1,2,3 )
  • Eclipse正在使用JRE,其中JDK是必要的(在这里可能是这种情况,从您的错误说的解决scheme )或JRE / JDK版本在项目构buildpath中是不正确的

这最终更像是一个限制相关问题的混合物,而不是一个实际的答案。 但是由于对所需项目的限制是要报告的这样一个多才多艺的错误,所以完美的配方可能还有待发现。

我有这个问题,因为与我的项目相关的项目面是错误的Java版本。

要解决这个问题,我做了以下几点:

  1. 右键单击该项目,然后select属性
  2. select“Project Facets”并将java版本更改为大于1.4的东西。
  3. 点击[应用]

这将重build您的项目,并希望错误将得到解决。

它的工作原理:项目属性 – > ProjectFacets – >运行时 – > jdk1.8.0_45 – >应用

如果您使用Spring Tool Suite遇到同样的问题:

实际上,Spring工具套件的底层IDE就是Eclipse。 我刚刚得到这个错误尝试使用一些com.sun.net类。 要删除这些错误,并阻止它们在STS的Eclipse Luna SR1(4.4.2)平台中popup:

  • 导航到“项目”>“属性”
  • 展开Java编译器标题
  • 点击错误/警告
  • 展开弃用和受限的API
  • 旁边的“禁止参考(访问规则)”select“忽略”
  • 在“劝阻引用(访问规则)”旁边select“忽略”

你很好走。

在Eclipse顶部菜单栏中:

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

在Eclipse中添加javafx可访问权限,进入项目>属性> java构buildpath>库>然后展开库并双击>在那里设置权限的访问规则解决scheme:可访问规则模式:javafx / **

在这里输入图像描述

在这里输入图像描述

在这里输入图像描述

有同样的问题。 以下是我解决它的方法:转到包资源pipe理器。 右键单击JRE系统库并转到属性。 在“类path容器”>“select项目构buildpath的JRE”中,select第三个选项(工作区默认JRE)。

来源: https : //thenewboston.com/forum/topic.php?id = 3917

转到以下设置:

窗口 – >首选项 – > Java编译器 – 错误/警告 – 弃用和受限制的API – 禁止引用(访问规则)

将其设置为“ Warning或“ Ignore

我已经日食JRE 8.112,不知道是否重要,但我做了什么:

  1. 右键单击我的项目文件夹
  2. 去了属性和点击
  3. 点击java构buildpath文件夹
  4. 一旦进入,我就在命令和出口
  5. 我检查了JRE系统库[jre1.8.0_112]
  6. 然后把它移到另一个JRE系统库上面(不知道这是否重要)
  7. 然后按下确定

这解决了我的问题。

在Eclipse Mars.2 Release(4.5.2)中:
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
selectJRE …并按编辑:切换到工作区JRE(jdk1.8.0_77)

为我工作。

试试这个: – 右键单击​​项目(在eclipse中) – >select“Project Facets”(左面板) – >select'java'(中间面板) – >select'Runtimes'(右面板)..在那里,确保如果没有select“Apache Tomcat”,则select它,然后单击“应用”,然后“确定”

我只是在eclipse marketplace中添加e(fx)clipse。 简单而简单

我使用Eclipse霓虹灯3.我只是想使用javafx.application.Application,所以我遵循上面的Christian Hujer的答案,它的工作。 只是一些提示:访问规则非常类似于导入语句。 对我来说,我添加的访问规则是“javafx / application / **”。 只需用正斜杠replace导入语句中的点,这就是规则。 希望有所帮助。