访问限制:'Application'类型不是API(对所需库rt.jar的限制)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

代码如下:

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中创建Java项目时,我指定了JRE 8.当我进入项目的构建路径并编辑了JRE系统库时,选择了Java 8执行环境。当我选择使用“Alernate JRE”(仍然是java 8)时,它为我解决了错误。

用户回答回答于

背景:Eclipse 访问限制

Eclipse有一种称为访问限制的机制,可以防止您意外使用Eclipse认为不属于公共API的类。通常来说,Eclipse在这两方面都是正确的:我们通常不想使用不属于公共API的东西。而且Eclipse通常是正确的,它不是公有API的一部分。

问题

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

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

扫码关注云+社区