在 JRE 8 中使用 JavaFX,出现“访问限制”错误

2022-08-31 11:11:00

当我尝试在我的新java 8项目中使用javafx相关类时,我收到来自eclipse的访问限制错误。到目前为止,我能找到的唯一“解决方案”是告诉eclipse忽略访问限制,但我对此并不满意。错误示例:

Access restriction: The type Pane is not accessible due to 
restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar

我正在使用Eclipse Kepler和Java 8的Eclipse JDT补丁。

这似乎是一个与JavaFX不是JavaSE执行环境的一部分这一事实有关的问题。

我现在很难糊涂,因为根据 http://en.wikipedia.org/wiki/JavaFX javaFX是JavaSE的一部分。Eclipse有没有可能没有意识到它是javaSE的一部分?


答案 1

我将在这里再添加一个答案,只是为了提供我认为最简约的方法。在我的 Eclipse 设置中,我安装了 e(fx)clipse,它提供了一个修复程序,并且提供了许多有用的开发功能,如果您正在编写 JavaFX 应用程序,您几乎肯定会想要这些功能。这可能是最实用的方法。如果由于某种原因您不想要该插件,则本答案中概述的解决方案将以最少的其他副作用解决问题。

正如在其他答案中指出的那样,Eclipse 默认不允许访问 jre/lib/ext 目录中 jar 文件中的类,因为这些类不能保证存在于所有 Java 平台上。如果您正在编写 JavaFX 8 应用程序,那么您假设您位于 lib/ext 位置中提供 jfxrt.jar 的平台上。

因此,对此的最低修复是允许访问此jar文件中的类(并且仅在此jar文件中)。为此,请右键单击该项目并打开项目属性对话框。在左侧窗格中选择“构建路径”,然后选择“库”选项卡。您将看到一个“JRE 系统库”条目。展开该条目,您将看到一个“访问规则”子条目:

enter image description here

选择“访问规则”条目,然后单击“编辑”。点击“添加”。

enter image description here

在“解决方案”下,选择“可访问”,然后在“规则模式”下,输入:javafx/**

enter image description here

单击“确定”退出所有对话框。

此设置将允许访问任何包中的所有类,但将为所有其他类保留 ext 文件夹的规则,并且从这个意义上说是“最小”的。javafx.

同样,您可能真正想做的是安装 e(fx)clipse 插件,但据我所知,这是对 Eclipse 设置副作用最小的解决方案。


答案 2

从Eclipse的角度来看,这个错误是完全正确的,因为JavaFX来自扩展类路径,并且不是在所有Java8 VM(例如ibm!)上都可用。

如前所述,您可以通过添加访问规则或恕我直言,最好的解决方案是安装e(fx)clipse,它会自动为您执行此操作,除此之外,甚至为您提供JavaFX CSS和FXML的工具。

您可以从 http://efxclipse.bestsolution.at/install.html 中获取一个多合一的软件包


推荐