访问限制:“应用程序”类型不是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)
eclipse说这个:
访问限制:"应用程序"类型不是API(对所需库'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'的限制)
#1 热门回答(199 赞)
这也发生在我身上,这里给出的答案已经不满意,所以我做了自己的研究。
#背景:Eclipse访问限制
Eclipse有一个名为访问限制的机制,以防止你意外使用Eclipse认为不属于公共API的类。通常,Eclipse在这两种意义上都是正确的:我们通常不希望使用不属于公共API的东西。 Eclipse通常是关于什么是什么,什么不是公共API的一部分。
#问题
现在,在某些情况下,你可能希望使用公共非API,例如sun.misc
(除非你知道自己在做什么,否则不应该这样做)。并且可能存在Eclipse不正确的情况(这就是发生在我身上的事情,我只是想使用javax.smartcardio
)。在这种情况下,我们在Eclipse中遇到此错误。
#解决方案
解决方案是更改访问限制。
- 转到Java项目的属性,即在"Package Explorer"中从项目的上下文菜单中选择"Properties"。
- 转到"Java Build Path",选项卡"Libraries"。
- 展开库条目
- 使用相应的规则模式选择"访问规则","编辑..."和"添加...""分辨率:可访问"。对我而言,这是"javax / smartcardio /",对你而言,它可能是"com / apple / eawt /"。
#2 热门回答(61 赞)
我遇到了同样的问题。当我最初在Eclipse中创建java项目时,我指定了JRE 8.当我进入项目的构建路径并编辑JRE系统库时,选择了Java 8执行环境。当我选择使用"Alernate JRE"(仍然是java 8)时,它为我修复了错误。
#3 热门回答(33 赞)
在eclipse氧气中添加javafxaccessible权限转到项目>属性> java构建路径>库>然后展开库并双击>访问规则,在那里设置权限解决方案:可访问规则模式:javafx /**