访问限制:类型“应用程序”不是 API(对所需库 rt.jar 的限制)背景:日食访问限制 问题溶液

2022-08-31 06:18:31

代码如下:

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)

日食是这样说的:

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


答案 1

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

背景:日食访问限制

Eclipse 有一种称为访问限制的机制,以防止您意外使用 Eclipse 认为不属于公共 API 的类。通常,Eclipse在这两个意义上都是正确的:我们通常不想使用不属于公共API的东西。Eclipse通常是正确的,什么是公共API的一部分,什么不是公共API的一部分。

问题

现在,在某些情况下,您可能希望使用公共非API,例如(除非您知道自己在做什么,否则您不应该这样做)。在某些情况下,Eclipse并不是真的正确(这就是发生在我身上的事情,我只是想使用)。在这种情况下,我们在 Eclipse 中得到了这个错误。sun.miscjavax.smartcardio

溶液

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

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

答案 2

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