代码如下:

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说:

访问限制:'Application'类型不是API(对必需库'/ 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)时,它为我修复了这个错误。

其他回答

如果你在使用Spring工具套件时有同样的问题:

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

导航到项目>属性 展开Java Compiler标题 点击错误/警告 扩展已弃用和受限的API 在“禁止引用(访问规则)”旁边选择“忽略” 在“不鼓励引用(访问规则)”旁边选择“忽略”

你可以出发了。

对我有用的是将访问限制包添加到MANIFEST中。MF文件。在Eclipse中,“Access Restricted”错误显示在几个文件的Problems选项卡中。我只是右键点击每个错误,点击“快速修复”,并选择“添加[包]到导入的包”。

我们使用IBM Rational Application Developer (RAD),也遇到了同样的问题。

ErrorMessage:

访问限制:'JAXWSProperties'类型不是API(对必需库'C:\IBM\RAD95\jdk\jre\lib\rt.jar'的限制)

解决方案:

进入java构建路径,在Library标签下,删除JRE System Library。然后再次添加库—> JRE系统库

在Eclipse Mars.2 Release(4.5.2)中: 项目资源管理器->上下文菜单->属性-> JavaBuildPath ->库 选择JRE…然后按编辑:切换到工作区JRE (jdk1.8.0_77)

对我有用。

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

背景:Eclipse访问限制

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

问题

有些情况下,你想使用公共非api,比如sun。杂项(你不应该这样做,除非你知道自己在做什么)。在某些情况下,Eclipse并不正确(这就是我的情况,我只想使用javax.smartcardio)。在这种情况下,我们在Eclipse中得到这个错误。

解决方案

解决方案是改变访问限制。

转到Java项目的属性, 即在“包资源管理器”的项目上下文菜单中选择“属性”。 进入“Java Build Path”,选择“Libraries”。 展开库条目 选择 “访问规则”, “编辑……” “添加……”一个带有相应规则模式的“决议:可访问”。 对我来说是“javax/smartcardio/**”,对你来说可能是“com/apple/eawt/**”。