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

时间:2014-04-02 13:07:34

标签: java eclipse javafx java-8

当我在新的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 8的Eclipse JDT补丁。

这似乎与JavaFX不是JavaSE执行环境的一部分有关。

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

11 个答案:

答案 0 :(得分:117)

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

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

因此 minimal 修复此问题是为了允许访问此jar文件中的类(并且仅在此jar文件中)。要执行此操作,请右键单击项目并调出项目属性对话框。选择"构建路径"在左侧窗格中,选择" Libraries"标签。您将看到一个" JRE系统库"条目。展开该条目,您将看到"访问规则"子条目:

enter image description here

选择"访问规则"输入并单击"编辑"。点击"添加"。

enter image description here

在" Resolution"下,选择" Accessible",然后在"规则模式"下,输入javafx/**

enter image description here

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

此设置将允许访问以javafx.开头的任何包中的所有类,但会将规则保留在所有其他类的ext文件夹中,并且是" minimal"从那个意义上说。

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

答案 1 :(得分:62)

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

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

您可以从http://efxclipse.bestsolution.at/install.html

获取一个包装

答案 2 :(得分:18)

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

答案 3 :(得分:9)

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

  1. 选择帮助 - >安装新软件
  2. 单击“添加”按钮添加以下站点:
  3. 点击确定
  4. 在"使用"中,选择最近添加的网站" efxclipse"
  5. 选中复选框" e(fx)clipse - install"安装此选择的所有组件
  6. 转到后续步骤以完成安装
  7. 重新启动Eclipse。如果它仍然无法识别JavaFX库,请重新启动它。
  8. 原始信息可在此处找到:https://www.eclipse.org/efxclipse/install.html#for-the-lazy

答案 4 :(得分:7)

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

  • 打开您的应用程序项目的属性,然后选择“构建路径”'部分。
  • 将jre8_0 \ lib \ ext \ _jfxrt.jar添加为"外部JAR文件"在里面 '库'标签。
  • 在' Order / Export' tab确保这个jfxrt.jar是 列表中的第一个。

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

您可能希望更改任何运行配置,以便它不会使用“导出的”#39; jfxrt.jar的版本;但实际上,这并不会有所作为。

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

答案 5 :(得分:5)

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

在图书馆

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

enter image description here

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

enter image description here

答案 6 :(得分:3)

请按以下步骤操作:
1.将jfxrt.jar(来自installtion文件夹)添加为&#34;外部JAR文件&#34;在&#39;图书馆&#39;标签

  1. 在&#39; Order / Export&#39;选项卡确保此jfxrt.jar位于列表中的第一位。
  2. 这对我有用

答案 7 :(得分:3)

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

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

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

    Java-&gt; Compiler-&gt;错误/警告视图

    “已弃用且受限制的API”

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

    enter image description here

答案 8 :(得分:1)

正如James_D已经建议我将访问规则添加到我的类路径文件中。我暂时卸载了e(fx)clipse插件,因为它有一个css验证错误(参见How to disable css warning "Unknown property" in Eclipse Mars?)。

这是我在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>

答案 9 :(得分:1)

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

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

答案 10 :(得分: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。