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

Eclipse说:

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

317781 次浏览

从(和不相关的)开始,自己实例化Application类似乎不是它的预期用途。从它的中读取的内容来看,你应该使用getApplication()返回的静态实例。

现在让我们来看看错误Eclipse报告。我最近遇到了一个类似的问题:Access restriction: The method ... is not API (restriction on required project)。我将该方法调用为从超类继承该方法的对象的方法。我所要做的就是将超类所在的包添加到插件导入的包中。

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

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

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

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

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

背景:Eclipse 访问限制

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

问题

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

解决方案

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

  • 进入Java项目的属性,
    • 即在“包资源管理器”的项目上下文菜单中选择“属性”。
    • 李< / ul > < / >
    • 进入“Java Build Path”,选择“Libraries”。
    • 展开库条目
    • <李>选择
      • “访问规则”,
      • “编辑……”
      • "Add…" a带有相应规则模式的"Resolution: Accessible"。 对我来说是“javax/smartcardio/**”,对你来说可能是“com/apple/eawt/**” 李< / ul > < / >

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

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

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

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

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

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

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

你可以出发了。

它工作:项目属性-> ProjectFacets ->运行时-> jdk1.8.0_45 ->应用

进入以下设置:

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

设置为WarningIgnore

在Eclipse顶部菜单栏中:

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning

在Eclipse Mars.2 Release(4.5.2)中:
. 0 Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries < br > 选择JRE…然后按Edit: Switch to Workspace JRE (jdk1.8.0_77)

对我有用。

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

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

这解决了我的问题。

有同样的问题。以下是我的解决方法: 进入包资源管理器。右键单击JRE系统库,然后进入属性。在Classpath Container中为项目构建路径选择JRE,选择第三个选项(工作区默认JRE)

来源:https://thenewboston.com/forum/topic.php?id=3917

我只是简单地在eclipse市场中添加e(fx)clipse。简单明了

我用的是日食霓虹灯。我只想使用javafx.application。应用,所以我遵循Christian Hujer上面的答案,它起作用了。只是一些提示:访问规则与import语句非常相似。对我来说,我添加的访问规则是“javafx/application/**”。只需将import语句中的点替换为正斜杠,这就是规则。希望这能有所帮助。

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

enter image description here

enter image description here

enter image description here

我们必须使用窗口- >首选项- > Java - >安装jre将应用程序更改为针对JDK 1.8构建。但是,在更改后,在项目资源管理器中指定的JRE系统库仍然不正确。要解决这个问题,右键单击“JRE系统库[wrong-jre-here]”,并将执行环境:更改为“工作区默认(yer-default-here)”

enter image description here

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

ErrorMessage:

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

解决方案:

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

我遇到了一个不同的问题。在项目-属性-库- JRE库,我有错误的JRE库版本。删除并设置实际的Access restriction...警告,瞧——所有Access restriction...警告都消失了。

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

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

Bundle-RequiredExecutionEnvironment: JavaSE-1.8

即使是老问题,对我来说,在Eclipse中,我只需右键单击Src文件夹和属性(Alt+Enter),检查Ignore optional compile problems就消除了错误。

enter image description here

删除现有/配置的系统库: Eclipse (IDE)→Project Explorer ->项目名称→(选项)构建路径->配置构建路径->Java Build Path ->库→(Select) JRE系统库[(对我来说)jre1.8.0_231] ->删除。< / p >

当前您在同一位置: Eclipse (IDE)→Project Explorer ->项目名称→(选项)构建路径->配置构建路径->Java Build Path ->库< / p >

现在再次添加相同的系统库: 添加库->JRE系统库->工作空间默认JRE ((对我来说)jre1.8.0_231) ->完成→申请→关闭。< / p >

现在等着完成它。

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

我在Eclipse 4.20.0和JRE 1.8上遇到了同样的错误。要消除此编译错误,请执行以下操作:

Project --> Properties --> Java Compiler --> Errors/Warnings --> Deprecated and Restricted API --> Forbidden Reference (access rules) -->  ignore