访问限制:"应用程序"类型不是API(对所需库rt.jar的限制)

www*_*139 164 java eclipse macos 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

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)
Run Code Online (Sandbox Code Playgroud)

eclipse说这个:

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

Chr*_*jer 255

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

背景:Eclipse 访问限制

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

问题

现在,在某些情况下,您可能希望使用公共非API,sun.misc(除非您知道自己在做什么,否则不应该这样做).并且可能存在Eclipse不正确的情况(这就是我发生的事情,我只想使用javax.smartcardio).在这种情况下,我们在Eclipse中遇到此错误.

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

  • 转到Java项目的属性,
    • 即通过在"Package Explorer"中从项目的上下文菜单中选择"Properties".
  • 转到"Java Build Path",选项卡"Libraries".
  • 展开库条目
  • 选择
    • "访问规则",
    • "编辑......"和
    • "添加..."具有相应规则模式的"分辨率:可访问".对我而言," javax/smartcardio/**"对你而言,它可能是" com/apple/eawt/**".

  • 我有Eclipse Mars(4.5.0),Java Build Path中没有访问规则 - > Libraries.FWIW在首选项 - > Java - >编译器 - >错误/警告 - >不推荐使用和受限制的API中有一个更大的锤子(你可以全部关闭). (25认同)
  • 我有Eclipse Mars.1 Release(4.5.1).对我来说,这两种解决方 克里斯蒂安的回答和乔纳森的评论.在选项卡库中,您必须打开列出的"JAR和类文件夹"中的一个,以查看属于它的"访问规则". (4认同)
  • 这对我不起作用.Eclipse Luna.试过JDK 1.8,1.7,添加了访问规则,清理项目,错误不断回来.还尝试了@JonathanRoss的建议 - 首先是在Project Level.虽然,Forbidden/Discouraged API的项目级配置设置为警告,但我仍然遇到错误.然后我尝试(正如Jonathan建议的那样)通过工作区级别设置的首选项,并且THERE,Forbidden API被设置为Error.更改为警告确实会让问题消失,但项目级别设置应该被覆盖,认为这是Eclipse中的一个错误. (3认同)
  • 有一个更简单的替代方法:删除并添加回 JRE 系统库,如 /sf/answers/152222521/ 中所指出的 (3认同)
  • 在我的情况下,我不允许修改访问限制:Eclipse Neon 在 jar“jfxrt.jar”上有一个 Maven jar 项目。 (2认同)

Amb*_*ber 78

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

  • 我更喜欢全局修复,但它比全局启用受限API的所有其他答案更好.(我不想在我的javafx应用程序中意外使用sun.*). (2认同)
  • 谢谢,这清除了我项目中的所有警告。Eclipse 抱怨 JavaFX (jfxrt.jar) 提供的所有类 (2认同)
  • 确认......我用JRE 8 u60更改了JRE 8 u60.显然,与其他任何方式相反,触发此重建具有解决问题的副作用.(有关如何更改此设置的更详细说明,请参阅Nikhil Mahajan的答案:http://stackoverflow.com/questions/6881622/point-eclipse-ide-to-use-another-jre-jdk-other-than -one-specified-in-java-home.) (2认同)

小智 59

添加JavaFX的访问权限在Eclipse中的氧气去项目>属性> Java构建路径>库>,然后展开>访问规则有你设定的权限分辨率库并双击:残疾人专用规则模式:JavaFX的/**

在此输入图像描述

在此输入图像描述

在此输入图像描述


J. *_*kel 22

首先(和不相关),Application自己实例化类似乎不是它的预期用途.从可以从其源代码中读取的内容,您可能希望使用返回的静态实例getApplication().

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

但是,基于"对所需项目/库的限制",存在许多不同的错误原因.与上述问题类似,您使用的类型可能依赖于未由库导出或可能不会自行导出的包.在这种情况下,您可以尝试跟踪丢失的软件包并按照此处的建议自行导出,或尝试访问规则.其他可能的情况包括:

  • Eclipse的希望让你使用不属于公共Java API的一部分可用的软件包(溶液1,2)
  • 依赖关系是由多个源满足,版本是矛盾等.(溶液1,2,3)
  • Eclipse正在使用JRE,其中需要JDK(可能就是这里的情况,从你的错误说的那个; 解决方案)或项目构建路径中的JRE/JDK版本是不正确的

这最终更像是与限制相关的问题,而不是实际的答案.但由于对所需项目的限制是如此多样化的错误报道,因此可能仍然可以找到完美的配方.


小智 17

我有这个问题,因为与我的项目相关的项目方面是错误的java版本.

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

  1. 右键单击项目,然后选择"属性"
  2. 选择"Project Facets"并将java版本更改为大于1.4的版本.
  3. 点击[申请]

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


小智 13

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


Din*_*ale 12

我们必须使用Window-> Preferences-> Java-> Installed JRE更改应用程序以针对JDK 1.8进行构建。但是,更改后,在Project Explorer中指定的JRE系统库仍然不正确。要解决此问题,请右键单击“ JRE系统库[wrong-jre-here]”,然后从“执行环境”更改为“ Workspace Default(在此为yer-default-here)”。

在此处输入图片说明


小智 11

在Eclipse顶部菜单栏中:

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


Gra*_*ing 9

如果您使用Spring Tool Suite遇到同样的问题:

Spring Tool Suite的底层IDE实际上是Eclipse.我刚刚尝试使用某些com.sun.net类时遇到此错误.要删除这些错误并防止它们在STS的Eclipse Luna SR1(4.4.2)平台中弹出:

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

你很高兴.


Nis*_*ngh 6

有同样的问题.以下是我解决它的方法:转到Package Explorer.右键单击JRE System Library并转到Properties.在类路径容器>为项目构建路径选择JRE中,选择第三个选项(工作区默认JRE).

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


Jon*_*ess 6

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

错误信息:

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

解决方案:

转到 java 构建路径并在库选项卡下,删除 JRE 系统库。然后再次添加库 --> JRE 系统库


小智 5

转到以下设置:

Window -> Preferences -> Java-Compiler-Errors/Warnings-Deprecated 和受限 API-Forbidden 参考(访问规则)

将其设置为WarningIgnore


归档时间:

查看次数:

238773 次

最近记录:

6 年,1 月 前