这是代码:
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 的一部分,什么不是公共 API 的一部分。
问题
现在,在某些情况下,您可能想要使用公共非 API,例如 sun.misc
(您不应该这样做,除非您知道自己在做什么)。在某些情况下,Eclipse 并不真正正确(这就是发生在我身上的事情,我只是想使用 javax.smartcardio
)。在这种情况下,我们会在 Eclipse 中收到此错误。
解决方案
解决方案是更改访问限制。
转到Java 项目的属性,即从“Package Explorer”中项目的上下文菜单中选择“Properties”。
即通过从“包资源管理器”中项目的上下文菜单中选择“属性”。
转到“Java 构建路径”,选项卡“库”。
展开库条目
选择“访问规则”、“编辑...”和“添加...”以及具有相应规则模式的“解决方案:可访问”。对我来说是“javax/smartcardio/**”,对你来说可能是“com/apple/eawt/**”。
“访问规则”,
“编辑...”和
“添加...”一个带有相应规则模式的“解决方案:可访问”。对我来说是“javax/smartcardio/**”,对你来说可能是“com/apple/eawt/**”。
我遇到了同样的问题。当我最初在 Eclipse 中创建 java 项目时,我指定了 JRE 8。当我进入项目的构建路径并编辑 JRE 系统库时,选择了 Java 8 执行环境。当我选择使用“Alernate JRE”(仍然是 java 8)时,它为我修复了错误。
Java 1.8
。
在 Eclipse 氧气中添加 javafx 可访问权限转到项目> 属性> java 构建路径> 库> 然后展开库并双击> 访问规则在那里设置权限解决方案:可访问规则模式:javafx/**
https://i.stack.imgur.com/rGWzT.png
https://i.stack.imgur.com/aL6sj.png
https://i.stack.imgur.com/UxJIH.png
首先(和无关),自己实例化 Application
类似乎不是它的预期用途。从它的 source 可以读取的内容来看,您应该使用 getApplication()
返回的静态实例。
现在让我们来看看 Eclipse 报告的错误。我最近遇到了类似的问题:Access restriction: The method ... is not API (restriction on required project)
。我将所讨论的方法称为从超类继承该方法的对象的方法。我所要做的就是将超类所在的包添加到我的插件导入的包中。
但是,基于“对所需项目/库的限制”,有很多不同的错误原因。与上面描述的问题类似,您使用的类型可能依赖于未由库导出的包或可能不会自行导出的包。在这种情况下,您可以按照建议 here 尝试查找丢失的包并自己导出它们,或者尝试访问规则。其他可能的情况包括:
Eclipse 希望阻止您使用不属于公共 Java API 的可用包(解决方案 1、2)
多个来源满足依赖关系,版本冲突等(解决方案 1、2、3)
Eclipse 正在使用需要 JDK 的 JRE(根据您的错误所说;解决方案可能就是这种情况)或项目构建路径中的 JRE/JDK 版本不正确
这最终更像是限制相关问题的混合体,而不是实际答案。但是由于对所需项目的限制是一个需要报告的通用错误,因此可能仍然需要找到完美的方法。
我们必须更改我们的应用程序以使用 Window->Preferences->Java->Installed JREs 针对 JDK 1.8 构建。但是,更改后,在 Project Explorer 中指定的 JRE System Library 仍然不正确。要解决此问题,请右键单击“JRE System Library [wrong-jre-here]”并从执行环境更改:更改为“Workspace Default (yer-default-here)”
https://i.stack.imgur.com/JkARy.png
我遇到了这个问题,因为与我的项目关联的项目方面是错误的 java 版本。
为了解决这个问题,我做了以下事情:
右键单击项目并选择 Properties 选择“Project Facets”并将 java 的版本更改为大于 1.4 的版本。点击【申请】
这将重建您的项目,并希望错误将得到解决。
它起作用了:项目属性-> ProjectFacets-> 运行时-> jdk1.8.0_45-> 应用
在 Eclipse 顶部菜单栏中:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
如果您在使用 Spring Tool Suite 时遇到同样的问题:
Spring Tool Suite 的底层 IDE 实际上是 Eclipse。我刚刚尝试使用某些 com.sun.net
类时遇到此错误。要消除这些错误并防止它们在 STS 的 Eclipse Luna SR1 (4.4.2) 平台中弹出:
导航到项目 > 属性
展开 Java 编译器标题
单击错误/警告
扩展已弃用和受限的 API
在“禁止引用(访问规则)”旁边选择“忽略”
在“不鼓励参考(访问规则)”旁边选择“忽略”
你可以走了。
有同样的问题。这是我解决它的方法:转到包资源管理器。右键单击 JRE 系统库并转到属性。在 Classpath Container > Select JRE for the project build path 中选择第三个选项(Workspace 默认 JRE)。
来源:https://thenewboston.com/forum/topic.php?id=3917
我们使用 IBM Rational Application Developer (RAD) 并且遇到了同样的问题。
错误信息:
访问限制:“JAXWSProperties”类型不是 API(对所需库“C:\IBM\RAD95\jdk\jre\lib\rt.jar”的限制)
解决方案:
转到 java build path 并在 Library 选项卡下,删除 JRE System Library。然后再次添加库-> JRE系统库
转到以下设置:
Window -> Preferences -> Java-Compiler-Errors/Warnings-Deprecated and restricted API-Forbidden reference(访问规则)
将其设置为 Warning
或 Ignore
。
在 Eclipse Mars.2 Release (4.5.2) 中:
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
选择 JRE... 并按编辑:切换到工作区 JRE (jdk1.8.0_77)
为我工作。
我有 eclipse JRE 8.112 ,不确定这是否重要,但我所做的是:
右键单击我的项目文件夹进入属性并单击一次在里面单击 java 构建路径文件夹,我按顺序导出我检查了 JRE 系统库 [jre1.8.0_112] 然后将它移到另一个 JRE 上方那里的系统库(不确定这是否重要)然后按确定
这解决了我的问题。
我只是在 Eclipse 市场中添加了 e(fx)clipse。简单易行
即使它是老问题,对我来说,在 Eclipse 中我只需右键单击 Src 文件夹 和属性 (Alt+Enter) 并检查 Ignore optional compile problems
即可删除错误。
https://i.stack.imgur.com/PzsxJ.png
删除现有/配置的系统库:Eclipse(IDE) -> Project Explorer -> Project Name-> (Option) Build Path -> Configure Build Path -> Java Build Path -> Libraries -> (Select) JRE System Library [(For我)jre1.8.0_231] -> 删除。
目前您位于同一位置:Eclipse(IDE) -> Project Explorer -> Project Name-> (Option) Build Path -> Configure Build Path -> Java Build Path -> Libraries
现在再次添加相同的系统库:添加库 -> JRE 系统库 -> 工作区默认 JRE ((对我来说)jre1.8.0_231) -> 完成 -> 应用 -> 关闭。
现在等待完成它。
我正在使用eclipse neon 3。我只是想使用javafx.application.Application,所以我按照上面Christian Hujer的回答并且它有效。只是一些提示:访问规则与 import 语句非常相似。对我来说,我添加的访问规则是“javafx/application/**”。只需用正斜杠替换 import 语句中的点,这就是规则。希望有帮助。
我有一点不同的问题。在项目 - 属性 - 库 - JRE 库中,我的 JRE 库版本错误。删除并设置实际的,瞧 - 所有 Access restriction...
警告都消失了。
如果有人在运行 maven 时仅在您的 CI 工具中遇到此问题,那么对我来说,诀窍是在您的 MANIFEST.MF
中明确定义执行环境。
就我而言,我通过在我的 OSGi 捆绑清单文件中插入以下行来做到这一点:
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
对我有用的是将访问受限包添加到 MANIFEST.MF 文件中。在 Eclipse 中,多个文件的“问题”选项卡中显示“访问受限”错误。我只是右键单击每个错误,单击“快速修复”,然后选择“将'[包]'添加到导入的包”。
我在使用 JRE 1.8 的 Eclipse 4.20.0
上遇到了同样的错误。要消除此编译错误,请执行以下操作:
Project --> Properties --> Java Compiler --> Errors/Warnings --> Deprecated and Restricted API --> Forbidden Reference (access rules) --> ignore
不定期副业成功案例分享