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

当我在新的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的一部分?

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

如您所述,您可以通过添加访问规则或IMHO来抑制这些警告,最好的解决方案是安装e(fx)clipse,它会为您自动执行此操作,甚至为您提供JavaFX CSS和FXML的工具。

您可以从http://efxclipse.bestsolution.at/install.html获取一个包装

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

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

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

在此处输入图像描述

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

在此处输入图像描述

在“Resolution”下,选择“Accessible”,在“Rule Pattern”下输入javafx/**

在此处输入图像描述

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

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

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

我通过删除JDK并将其读取到构建路径来解决了这个问题。 不过,不要问我为什么会这样。

我通过仔细使用Eclipse项目的构建路径解决了这个问题。

  • 打开您的应用程序项目的属性,然后选择“构建路径”部分。
  • 在“库”选项卡中将jre8_0 \ lib \ ext \ _jfxrt.jar添加为“外部JAR文件”。
  • 在“订单/导出”选项卡中,确保此jfxrt.jar位于列表中的第一位。

这样做使Eclipse将jfxrt.jar视为常规的第三方JAR文件。 顺序很重要,因此这优先于JRE系统库中的条目。 它与实际的JAR文件相同,但Eclipse看到的却不同。

您可能希望更改任何运行配置,以便它不使用jfxrt.jar的“已导出”版本; 但实际上,这不会产生任何影响。

我用Java8和Eclipse Luna完成了这个; 但我相信校长可以使用Java和Eclipse的任何组合。

简单的方法是安装e(fx)clipse – Eclipse的插件以支持JavaFX:

  1. 选择“帮助” – >“安装新软件”
  2. 单击“添加”按钮以添加以下站点:
    • 名称:efxclipse
    • 地点: http : //download.eclipse.org/efxclipse/updates-released/1.2.0/site
  3. 单击确定
  4. 在“使用”中,选择最近添加的网站“efxclipse”
  5. 选中“e(fx)clipse – install”复选框以安装此选择的所有组件
  6. 转到后续步骤以完成安装
  7. 重启你的Eclipse。 如果仍然无法识别JavaFX库,请重新启动它。

原始信息可以在这里找到: https : //www.eclipse.org/efxclipse/install.html#for-the-lazy

  • 转到当前项目的构建路径

在图书馆下

  • 选择“ JRE系统库 [jdk1.8xxx]”
  • 点击编辑
  • 并选择“Workspace default JRE(jdk1.8xx)” Alternate JRE
  • 点击完成
  • 单击确定

在此处输入图像描述

注意:确保在Eclipse / Preferences(不是项目)/ Java / Installed JRE中,jdk指向JDK文件夹而不是JRE C:\ Program Files \ Java \ jdk1.8.0_74

在此处输入图像描述

按着这些次序:
1.在“库”选项卡中将jfxrt.jar(来自installtion文件夹)添加为“外部JAR文件”。

  1. 在“订单/导出”选项卡中,确保此jfxrt.jar位于列表中的第一位。

这对我有用

我知道这已经得到了解答,但我发现建议的解决方案很笨拙。

  1. 我不想安装插件只是为了避免我认为是无效的错误。
  2. 添加jfxrt.jar作为外部jar会起作用,但如果你计划进行导出是一个坏主意,因为jfxrt.jar也会被导出。 可能不是你想要的。

另外一个选择

在’Mars’版本(可能还有早期版本)中,您可以禁用访问限制错误。 下

Java-> Compiler-> Errors / Warnings视图

“弃用和限制API”

您可以设置“禁止参考(访问规则)”以忽略。

在此处输入图像描述

正如James_D已经建议我将访问规则添加到我的类路径文件中。 我暂时卸载了e(fx)clipse插件,因为它有一个cssvalidation错误(请参阅如何在Eclipse Mars中禁用css警告“未知属性”? )。

这是我在JRE容器的类路径文件中的条目:

          

我有同样的问题。 我使用了James_D的解决方案,但他的确切解决方案对我不起作用。 但是使用**/javafx/**代替javafx/**解决了我的问题。 希望有所帮助。

PS:我会在James_D的解决方案中将其作为评论发布,但我刚刚注册并且没有足够的“声誉”这样做。

步骤1:导航到您的jfxrt.jar。 C:\ Program Files \ Java \ jre1.8.0_111 \ lib \ ext

步骤2复制文件jfxrt.jar

第3步:转到Eclipse,创建一个这样的新文件夹:[创建文件夹名称lib以放入我们的jfxrt.jar文件] [2] [2]: https ://i.stack.imgur.com/YsJ5S.png

步骤4:选择lib文件夹并按CTRL + V粘贴jfxrt.jar [粘贴你的jfxrt.jar] [1] [1]: https ://i.stack.imgur.com/Ljogu.png

步骤5:右键单击jfxrt.jar并设置为Build Path。