Eclipse对jfxrt.jar类的访问限制发出警告

Eclipse对jfxrt.jar类的访问限制发出警告,eclipse,maven,javafx,java-8,eclipse-kepler,Eclipse,Maven,Javafx,Java 8,Eclipse Kepler,我将EclipseKepler与JavaSE1.8JDK系统库一起使用,但当我使用任何javafx类或方法时,eclipse会发出一个警告,如访问限制:类型“TableColumn”不是API(对所需库“C:\ProgramFiles\java\jdk1.8.0\U 05\jre\lib\ext\jfxrt.jar”的限制) 我已尝试向系统库添加访问规则,以允许使用通配符*访问库中的所有JAR,但警告仍然存在。我还使用maven来构建项目。 代码可以工作,但警告很烦人,影响了我编写代码时的可读性

我将EclipseKepler与JavaSE1.8JDK系统库一起使用,但当我使用任何javafx类或方法时,eclipse会发出一个警告,如访问限制:类型“TableColumn”不是API(对所需库“C:\ProgramFiles\java\jdk1.8.0\U 05\jre\lib\ext\jfxrt.jar”的限制)

我已尝试向系统库添加访问规则,以允许使用通配符
*
访问库中的所有JAR,但警告仍然存在。我还使用maven来构建项目。 代码可以工作,但警告很烦人,影响了我编写代码时的可读性。感谢您的帮助


编辑:我还尝试在课程开始时添加
@SuppressWarnings(“restriction”)
,但这仍然无法解决未知原因,并且隐藏了我可能需要查看的所有其他限制警告您可以在以下设置中选择
忽略

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings
(Project) Properties -> Java Compiler -> Errors/Warnings
使用筛选器查找“禁止引用”

禁止引用(访问规则)
:将其更改为“
忽略”


最简单的方法是安装e(fx)clipse—一个Eclipse插件,用于支持JavaFX:

  • 选择帮助->安装新软件
  • 单击“添加”按钮添加以下站点:
    • 姓名:efxclipse
    • 地点:
  • 单击“确定”
  • 在“使用”下拉列表中,选择最近添加的站点“efxclipse”
  • 选中复选框“e(fx)clipse-install”以安装此选项的所有组件
  • 转到下一步以完成安装
  • 重新启动Eclipse。如果它仍然无法识别JavaFX库,请重新启动它

  • 可以在这里找到原始信息:

    我可以通过重新配置Java库来克服这个问题。例如,显式选择OracleJDK就可以做到这一点


    添加访问规则以允许访问
    javafx/**

    另见此答案:

    据我所知,在我看来,这是Eclipse中的一个bug。我也找不到一种在Eclipse中全局配置的方法,但您需要为每个项目重新进行配置

    导航到项目设置、生成路径、库、JRE。点击“访问规则”,通常应该有“未定义规则”。添加新规则:“可访问”,并输入模式“
    javafx/**

    这告诉EclipseJava编译器,
    javafx.*
    是允许您使用的官方API,因此警告消失了

    显然,只允许访问javafx比忽略警告要好得多


    *
    不起作用的原因是您没有阅读通配符定义。在访问规则中,
    *
    只匹配一次,您需要
    ***
    在任何深度进行匹配。也就是说,
    *
    将允许访问
    javafx.SomeClass
    ,但不允许访问
    javafx.scene.SomeClass

    javafx
    添加访问规则

    右键单击项目>属性>Java构建路径>库选项卡,然后:

    • 扩展JRE系统库
    • 选择访问规则,单击编辑…按钮
    • 单击添加…
    • 选择分辨率:
      Accessible
    • 设置规则模式:
      javafx/**
    • 单击
      OK
    • 单击
      OK

    谢谢您的帮助,但是如果我能解决警告的原因而不是抑制它,那就更好了。我强烈反对这种解决方案,它不应该被接受。您将更改所有库的设置,而不仅仅是JavaFX。我们应该确保在构建路径中使用JDK,如下面的答案所示……与其抑制警告,不如添加适当的访问规则。请参阅下面我的新答案。可能重复的通配符语法错误。您使用的是非递归的
    *
    ,您的意思是使用
    **
    ,您应该只使用
    javafx/**
    。请看下面我的答案。这项技术对我的效果与描述完全一样