访问限制:'Application'类型不是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)

日食说这个:

访问限制:“应用程序”类型不是API(对所需库的限制“/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar”)


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

背景:Eclipse访问限制

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

问题

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

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

  • 转到您的Java项目的属性,
  • 即通过在“包资源管理器”中从项目的上下文菜单中选择“属性”。
  • 转到“Java构建路径”,标签“库”。
  • 展开库条目
  • 选择
  • “访问规则”,
  • “编辑...”和
  • “添加...”一个“分辨率:可访问”与相应的规则模式。 对于我来说那是“ javax/smartcardio/** ”,对你来说它可能是“ com/apple/eawt/** ”。

  • 我遇到了同样的问题。 当我最初在Eclipse中创建Java项目时,我指定了JRE 8.当我进入项目的构建路径并编辑了JRE系统库时,选择了Java 8执行环境。 当我选择使用“Alernate JRE”(仍然是java 8)时,它为我解决了错误。


    在Eclipse中添加javafx可访问权限进入项目>属性> java构建路径>库>然后展开库并双击>在那里设置权限的访问规则解决方案:可访问规则模式:javafx / **

    在这里输入图像描述

    在这里输入图像描述

    链接地址: http://www.djcxy.com/p/73807.html

    上一篇: Access restriction: The type 'Application' is not API (restriction on required library rt.jar)

    下一篇: JOptionPane Issue in Eclipse