Java 访问限制:类型';应用程序';不是API(对所需库rt.jar的限制)
代码如下:Java 访问限制:类型';应用程序';不是API(对所需库rt.jar的限制),java,eclipse,macos,jar,Java,Eclipse,Macos,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); A
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);
}
}
以下是错误:
线程“main”java.lang中出现异常。错误:未解析编译
问题:访问限制:“应用程序”类型不是API
(对所需图书馆的限制)
“/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar”)
访问限制:构造函数“Application()”不是API
(对所需图书馆的限制)
“/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar”)
访问限制:“应用程序”类型不是API(对
必选库
“/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar”)
访问限制:方法
“Application.SetEnabledBoutMenu(布尔)”不是API(对
必选库
“/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar”)
无法将AMEListener解析为类型AMEListener无法
解析为一个类型
位于mscontroller.Main.Main(Main.java:9)
eclipse说:
访问限制:“应用程序”类型不是API(对所需库“/library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar”的限制)
首先(不相关),自己实例化应用程序
类似乎不是它的预期用途。从its中可以看出,您应该使用getApplication()
返回的静态实例
现在让我们来看一下Eclipse报告中的错误。最近我遇到了一个类似的问题:访问限制:方法。。。不是API(对所需项目的限制)
。我将所讨论的方法称为从超类继承该方法的对象的方法。我所要做的就是将超级类所在的包添加到插件导入的包中
然而,基于“对所需项目/库的限制”,有许多不同的错误原因。与上面描述的问题类似,您使用的类型可能与库未导出或自身未导出的包有依赖关系。在这种情况下,您可以尝试跟踪丢失的包,并根据建议自己导出它们,或者尝试访问规则。其他可能的情况包括:
- Eclipse希望阻止您使用不属于公共JavaAPI(解决方案)的可用包
- 依赖关系由多个源满足,版本冲突等(解决方案)
- Eclipse正在使用一个需要JDK的JRE(从您的错误来看,这里可能就是这种情况),或者项目构建路径中的JRE/JDK版本不是正确的版本
这最终更像是限制相关问题的混合,而不是一个实际的答案。但是,由于对所需项目的限制是一个需要报告的多方面错误,因此可能仍然需要找到完美的方法。我也遇到了同样的问题。当我最初在Eclipse中创建java项目时,我指定了JRE 8。当我进入项目的构建路径并编辑JRE系统库时,选择了Java8执行环境。当我选择使用“Alernate JRE”(仍然是java 8)时,它为我修复了错误。这也发生在我身上,这里给出的答案已经不令人满意,所以我做了自己的研究 背景:Eclipse访问限制 Eclipse有一种称为访问限制的机制来防止您意外使用Eclipse认为不属于公共API的类。通常,Eclipse在这两个方面都是正确的:我们通常不想使用不属于公共API的东西。Eclipse通常正确地描述了什么是公共API的一部分,什么不是公共API的一部分 问题 现在,在某些情况下,您可能希望使用公共非API,例如
sun.misc
(除非您知道自己在做什么,否则不应该这样做)。在某些情况下,Eclipse并不完全正确(我就是这么想的,我只是想使用javax.smartcardio
)。在这种情况下,我们在Eclipse中得到这个错误
解决方案
解决方案是更改访问限制
- 转到Java项目的属性,
- i、 e.从“包资源管理器”中的项目上下文菜单中选择“属性”李>
- 转到“Java构建路径”选项卡“库”李>
- 展开库条目
- 挑选
- “访问规则”
- “编辑…”和
- “添加…”一个带有相应规则模式的“解析:可访问”。
对我来说这是“
”,而对你来说可能是“javax/smartcardio/**
”com/apple/eawt/**
- 在项目上单击鼠标右键,然后选择“属性”
- 选择“ProjectFacets”并将java版本更改为大于1.4的版本
- 单击[应用]
- 我遇到这个问题是因为与我的项目关联的项目方面是错误的java版本
为了解决这个问题,我做了以下工作:
这将重建您的项目,希望错误能够得到解决。如果您使用Spring工具套件遇到同样的问题: 实际上,Spring工具套件的底层IDE是Eclipse。我刚才在尝试使用一些
com.sun.net
类时遇到了这个错误。要删除这些错误并防止它们出现在STS的Eclipse Luna SR1(4.4.2)平台中,请执行以下操作:
- 导航到项目>属性
- 展开Java编译器标题
- 单击错误/警告
- 展开不推荐的和受限制的API
- 在“禁止引用(访问规则)”旁选择“忽略”
- 在“不鼓励引用(访问规则)”旁选择“忽略”
你可以走了。成功了:项目属性->项目FAC
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
Bundle-RequiredExecutionEnvironment: JavaSE-1.8