代码如下:

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'的限制)


当前回答

首先(与此无关),自己实例化Application类似乎并不是它的预期用途。从可以从其源读取的内容来看,您应该使用getApplication()返回的静态实例。

现在让我们来看看错误Eclipse报告。我最近遇到了一个类似的问题:访问限制:方法…不是API(必需项目的限制)。我将该方法调用为从超类继承该方法的对象的方法。我所要做的就是将超类所在的包添加到插件导入的包中。

然而,基于“对所需项目/库的限制”,有许多不同的错误原因。与上面描述的问题类似,您所使用的类型可能对库未导出或本身未导出的包具有依赖关系。在这种情况下,您可以尝试追踪丢失的包,并按照这里的建议自行导出它们,或者尝试访问规则。其他可能的场景包括:

Eclipse希望阻止您使用不属于公共Java API的可用包(解决方案1,2) 依赖关系由多个源满足,版本冲突等等(解决方案1,2,3) Eclipse在需要JDK的地方使用JRE(从您的错误来看,这里可能就是这种情况;解决方案)或项目构建路径中的JRE/JDK版本不正确

这最终更像是一个与限制相关的问题的混合体,而不是一个实际的答案。但是,由于对必需项目的限制是一个如此多用途的错误,完美的配方可能仍有待找到。

其他回答

我遇到这个问题是因为与我的项目相关联的项目方面是错误的java版本。

为了解决这个问题,我做了以下工作:

右键单击项目并选择Properties 选择“Project Facets”,将java版本更改为大于1.4的版本。 点击【应用】

这将重新构建您的项目,希望错误将得到解决。

进入以下设置:

窗口->首选项-> java -编译器-错误/警告-弃用和限制api -禁止引用(访问规则)

设置为“警告”或“忽略”。

如果有人在运行maven时只在您的CI工具中遇到这个问题,那么对我来说,诀窍是在您的MANIFEST.MF中显式地定义执行环境。

在我的例子中,我通过在我的OSGi包清单文件中插入以下行来做到这一点:

Bundle-RequiredExecutionEnvironment: JavaSE-1.8

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

ErrorMessage:

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

解决方案:

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

我有eclipse JRE 8.112,不确定这是否重要,但我所做的是:

右键单击我的项目文件夹 点击属性 单击Java构建路径文件夹 一旦进入,我是在订单和出口 我检查了JRE系统库[jre1.8.0_112] 然后把它移到另一个JRE系统库上面(不确定这是否重要) 然后按确定

这解决了我的问题。