Eclipse / Java9:如何访问内部javafx包?

时间:2017-11-13 11:03:15

标签: eclipse javafx java-9

我的背景:

  • Eclipse IDE for Java Developers,版本:Oxygen.1a Release(4.7.1a),Build id:20171005-1200oxygen
  • jdk9.0.1
  • win10

简单的事情:

import com.sun.javafx.scene.control.LambdaMultiplePropertyChangeListenerHandler;

import javafx.application.Application;
import javafx.stage.Stage;

public class ImportCom extends Application {

    @Override
    public void start(Stage arg0) throws Exception {
        new LambdaMultiplePropertyChangeListenerHandler();

    }

}
由于

无法编译

The type com.sun.javafx.scene.control.LambdaMultiplePropertyChangeListenerHandler is not accessible

怎么办?

看起来similar但现在是内部类;)一直在编译直到beta9支持的补丁530,但之后没有 - 所以保持那个古老的氧气作为黄金宝藏......

注意:交叉发布到eclipse forum

编辑:

刚刚在命令行上检查了javac的行为:

C:\Users\kleopatra\ox-1a-64\dummy\src>\java\jdk\190-64\bin\javac first\ImportCom.java
first\ImportCom.java:3: error: package com.sun.javafx.scene.control is not visible
import com.sun.javafx.scene.control.LambdaMultiplePropertyChangeListenerHandler;
                           ^
  (package com.sun.javafx.scene.control is declared in module javafx.controls, which does not export it to the unnamed module)
1 error

错误类似于Eclipse中的错误。适用于--add-exports:

C:\Users\kleopatra\ox-1a-64\dummy\src>\java\jdk\190-64\bin\javac --add-exports=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED first\ImportCom.java

所以问题归结为:在哪里/如何配置Eclipse,以便它像javac一样编译对内部类的访问?

3 个答案:

答案 0 :(得分:6)

  1. 项目>中属性:Java Build Path Libraries 选项卡,选择节点 Modulepath / JRE系统库[JavaSE-9] / 是模块化的 并单击 编辑...
  2. 模块属性对话框的详细信息标签中,在 已添加导出 部分中单击 添加... 并输入以下内容:
    • 来源模块: javafx.controls
    • 套餐: com.sun.javafx.scene.control
  3. 点击 确定两次以关闭添加导出配置模块属性对话框和 应用并关闭 以关闭属性对话框
  4. enter image description here

答案 1 :(得分:4)

要解决此问题,您必须添加编译器参数 --add出口= javafx.controls / com.sun.javafx.scene.control = A LL-UNNAMED。 这也可以在Eclipse中完成,但我不得不承认在一个非常隐蔽的地方。

转到项目的属性,然后转到Java Build Path。 选择Modulepath,然后选择JRE System库(应该是java 9)。 在里面你找到一个项目"是模块化的"。选择那个。然后打开"编辑" 在右边,菜单将打开。在顶部选择"详细信息"。在那里,您将看到一个表格,您可以在其中添加导出。信不信由你工作:-)我必须清理并重新构建项目,以便真正得到这个编译。

答案 2 :(得分:3)

嗯,它有点隐藏:

  • 打开项目的 Java Build Path 对话框
  • 选择标签
  • 选择 isModular 条目
  • 使用编辑... 按钮打开模块属性对话框
  • 选择详细信息标签
  • 使用添加.. 按钮
  • 创建所有必需的条目

如果您已安装适用于Java 9支持的Beta插件 - 请卸载。确保安装了最新的Java 9支持插件。