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


83

当尝试在新的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与Eclipse JDT补丁用于Java 8。

这似乎与JavaFX不属于JavaSE执行环境的事实有关。

根据http://en.wikipedia.org/wiki/JavaFX的介绍,我现在感到非常困惑。javaFX是JavaSE的一部分。Eclipse是否有可能没有意识到它是javaSE的一部分?



3
您可能是正确的,他提出的解决方案对我有用。通过一半的工作,我的意思是,如果我使用“工作区默认值” jre(jdk1.8.0)添加JRE,则它可以工作,但是当使用“执行环境” JavaSE-1.8(jdk1.8.0)时,我仍然会遇到错误。
Lexxicon 2014年

Answers:


66

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

如概述的那样,您可以通过添加访问规则或恕我直言来禁止显示这些警告,最好的解决方案是安装e(fx)clipse,它会自动为您执行此操作,此外,它甚至为您提供JavaFX CSS和FXML的工具。

您可以从http://efxclipse.bestsolution.at/install.html抓取所有软件包


1
那是有道理的,我没有意识到其他虚拟机不支持JFX。我认为我的原始问题无法回答,因为它不是错误。不幸的是,由于某些工作原因,我无法使用您提出的解决方案。
Lexxicon 2014年

3
您知道所有这些都是Eclipse项目-多合一下载只是一个不错的功能,可帮助您快速入门。如果需要,也可以从Eclipse.org安装。参见eclipse.org/efxclipse/install.html
tomsontom 2014年

我知道,但是由于内部限制,我不允许使用它。话虽如此,如果您认为这是解决此问题的最佳方法,我将标记您的回答正确。
Lexxicon

5
只是侧面:如果您甚至不能在工作中安装eclipse插件,肯定有问题。将开发人员限制在特定的工具集上等同于限制他的技能和工作质量。
specializt

133

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

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

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

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

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


还有一种方法可以从Maven中的pom进行配置吗?
RobAu

1
清晰的解释
xploreraj

@RobAu见这里的专家工作:stackoverflow.com/questions/32565193/…–
Stefan

1
简单而完美!:)
Sanket Patel

我从你的回答中看到这一点e(fx)clipse is providing many useful development features 。在e(fx)clipse 2.6中添加了SashPane一个解决了一些SliderPane问题的新元素,但我真的不明白。我们可以从e(fx)clipse中使用任何类吗?我找不到类似的东西。我的意思是我无法访问任何类,也找不到可以在程序中使用的有用的东西,就像我的意思是库。纠正我,因为我知道我在这里错了... :)
GOXR3PLUS

19

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


1
我相信它可能对您有用的原因是,当您在构建路径中添加jre库时,它(eclipse)似乎默认为“工作区默认” jre,而不是使用执行环境。由于JFX似乎不是JavaSE(我选择的环境)的一部分,因此保留了该错误。而如果仅添加默认工作空间jre,它将不再具有这些限制。
Lexxicon 2014年

11

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

  1. 选择帮助->安装新软件
  2. 单击添加按钮添加以下站点:
  3. 点击确定
  4. 在“使用方式”中,选择最近添加的网站“ efxclipse”
  5. 选中复选框“ e(fx)clipse-安装”以安装此选择的所有组件
  6. 进行下一步以完成安装
  7. 重新启动Eclipse。如果仍然无法识别JavaFX库,请重新启动它。

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


谢谢;)简单轻松
J. Adam

可行,谢谢!刚刚将位置网址更新为:download.eclipse.org/efxclipse/updates-released/3.6.0/site
Crozeta

7

我已经通过谨慎使用Eclipse项目的构建路径解决了这个问题。

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

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

您可能希望更改任何运行配置,以使其不使用jfxrt.jar的“导出”版本。但是实际上,这没有什么区别。

我已经使用Java8和Eclipse Luna完成了此操作;但是我可以保证委托人可以使用Java和Eclipse的任何组合。


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

在图书馆下

  • 选择“ JRE系统库[jdk1.8xxx]”
  • 点击 编辑
  • 并选择“工作区默认JRE(jdk1.8xx)”备用JRE
  • 点击完成
  • 点击确定

在此处输入图片说明

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

在此处输入图片说明


4

我知道已经解决了这个问题,但是我发现建议的解决方案比较笨拙。

  1. 我不想安装插件只是为了避免我认为是无效的错误。
  2. 将jfxrt.jar添加为外部jar可以使用,但是如果您打算进行导出,则是个坏主意,因为jfxrt.jar也将被导出。可能不是您想要的。

另外一个选项

在“火星”版本(可能还有更早的版本)中,您可以禁用访问限制错误。下

Java->编译器->错误/警告视图

“已弃用和受限制的API”

您可以将“禁止引用(访问规则)”设置为忽略。

在此处输入图片说明


4

跟着这些步骤:

  1. (从安装文件夹中)将jfxrt.jar添加为“库”选项卡中的“外部JAR文件”。

  2. 在“订单/导出”标签中,确保此jfxrt.jar位于列表的第一位。

这对我有用。


2

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

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

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.‌​launcher.StandardVMType/JavaSE-1.8">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
    </attributes> 
    <accessrules>
        <accessrule kind="accessible" pattern="javafx/**"/>
        <accessrule kind="accessible" pattern="com/sun/javafx/**"/>
    </accessrules>
</classpathentry>

2

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

PS:我会在James_D的解决方案下将其发布为评论,但我只是注册而没有足够的“声誉”来这样做。


0

步骤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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.