以下是代码:
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)
eclipse说:
访问限制:“应用程序”类型不是API(对所需库的限制'/ Library / Java / JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
答案 0 :(得分:231)
这也发生在我身上,这里给出的答案已经不满意了,所以我做了自己的研究。
Eclipse有一种称为访问限制的机制,可以防止您意外使用Eclipse认为不属于公共API的类。通常,Eclipse在这两种意义上都是正确的:我们通常不希望使用不属于公共API的东西。 Eclipse通常是关于什么是什么,什么不是公共API的一部分。
现在,在某些情况下,您可能希望使用公共非API,例如sun.misc
(除非您知道自己在做什么,否则不应该这样做)。并且可能存在Eclipse不正确的情况(这就是发生在我身上的事情,我只想使用javax.smartcardio
)。在这种情况下,我们在Eclipse中收到此错误。
解决方案是更改访问限制。
javax/smartcardio/**
”,对你来说可能是“com/apple/eawt/**
”。答案 1 :(得分:76)
我遇到了同样的问题。当我最初在Eclipse中创建java项目时,我指定了JRE 8.当我进入项目的构建路径并编辑JRE系统库时,选择了Java 8执行环境。当我选择使用“Alernate JRE”(仍然是java 8)时,它为我修复了错误。
答案 2 :(得分:53)
在eclipse氧气中添加 javafx 可访问权限 转到项目>性状> java build path>库>然后展开库并双击>您在那里设置权限的访问规则 解决方案:可访问 规则模式:javafx / **
答案 3 :(得分:22)
首先(和无关),自己实例化Application
类似乎不是它的预期用途。从可以从source读取的内容,您可能希望使用getApplication()
返回的静态实例。
现在让我们来看看Eclipse报告的错误。我最近遇到了类似的问题:Access restriction: The method ... is not API (restriction on required project)
。我将有问题的方法称为从超类继承该方法的对象的方法。我所要做的就是将超类所包含的包添加到我的插件导入的包中。
但是,基于“对所需项目/库的限制”,导致错误的原因有很多种。与上述问题类似,您使用的类型可能依赖于未由库导出或可能不会自行导出的包。在这种情况下,您可以尝试跟踪丢失的软件包并按照建议here自行导出,或尝试访问规则。其他可能的情况包括:
这最终更像是与限制相关的问题,而不是实际的答案。但由于对所需项目的限制是一个如此通用的错误报告,所以仍然可以找到完美的配方。
答案 4 :(得分:17)
我遇到了这个问题,因为与我的项目相关的项目方面是错误的java版本。
为了解决这个问题,我做了以下事情:
这将重建您的项目,并希望错误将得到解决。
答案 5 :(得分:13)
它有效:项目属性 - > ProjectFacets - >运行时 - > jdk1.8.0_45 - >应用
答案 6 :(得分:10)
在Eclipse顶部菜单栏中:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
答案 7 :(得分:9)
如果您使用Spring Tool Suite遇到同样的问题:
Spring Tool Suite的底层IDE实际上是Eclipse。我刚刚尝试使用一些com.sun.net
类时遇到此错误。要删除这些错误并防止它们在STS的Eclipse Luna SR1(4.4.2)平台中弹出:
你很高兴。
答案 8 :(得分:7)
我们必须使用 Window-> Preferences-> Java-> Installed JREs 将我们的应用程序更改为针对JDK 1.8进行构建。但是,在更改之后,Project Explorer中指定的JRE系统库仍然不正确。要解决此问题,请右键单击" JRE系统库[wrong-jre-here]"并从执行环境更改为"工作区默认(默认 - 此处)"
答案 9 :(得分:5)
有同样的问题。这是我解决它的方式: 转到Package Explorer。右键单击JRE System Library并转到Properties。在Classpath容器中>为项目构建路径选择JRE选择第三个选项(Workspace default JRE)。
答案 10 :(得分:4)
转到以下设置:
窗口 - >偏好 - > Java编译器错误/警告 - 已弃用且受限制的API禁止引用(访问规则)
将其设置为Warning
或Ignore
。
答案 11 :(得分:3)
在Eclipse Mars.2版本(4.5.2)中:
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
选择JRE ...并按编辑:切换到工作区JRE(jdk1.8.0_77)
适合我。
答案 12 :(得分:3)
答案 13 :(得分:2)
我对JRE 8.112感到满意,不确定这是否重要,但我所做的是:
这解决了我的问题。
答案 14 :(得分:1)
我只是在eclipse市场中添加e(fx)clipse。简单易用
答案 15 :(得分:0)
我正在使用eclipse neon 3.我只想使用javafx.application.Application,所以我按照上面的Christian Hujer的说法进行了操作。只是一些提示:访问规则与import语句非常相似。对我来说,我添加的访问规则是“javafx / application / **”。只需用import斜杠替换import语句中的点,这就是规则。希望有所帮助。
答案 16 :(得分:0)
我们使用IBM Rational Application Developer(RAD)并遇到相同的问题。
错误消息:
访问限制:类型“ JAXWSProperties”不是API(对必需的库“ C:\ IBM \ RAD95 \ jdk \ jre \ lib \ rt.jar”的限制)
解决方案:
转到Java构建路径,然后在“库”选项卡下,删除“ JRE系统库”。然后再次添加库-> JRE系统库
答案 17 :(得分:0)
我有一个小问题。在项目-属性-库-JRE库中,我使用了错误的JRE库版本。删除并设置实际的警告,瞧-所有Access restriction...
警告都已消失。
答案 18 :(得分:0)
如果某人在运行maven时仅在您的CI工具中遇到此问题,那么我的诀窍是在MANIFEST.MF
中明确定义执行环境。
就我而言,我是通过在OSGi捆绑清单文件中插入以下行来实现的:
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
答案 19 :(得分:0)
删除现有/配置的系统库: Eclipse(IDE)->项目浏览器->项目名称->(选项)构建路径->配置构建路径-> Java构建路径->库->(选择)JRE系统库[(对我来说)jre1.8.0_231]->删除。
当前您位于同一位置: Eclipse(IDE)->项目浏览器->项目名称->(选项)构建路径->配置构建路径-> Java构建路径->库
现在再次添加相同的系统库: 添加库-> JRE系统库->工作区默认JRE((对我来说)jre1.8.0_231)->完成->应用->关闭。
现在等待完成。