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

kle*_*tra 3 eclipse javafx java-9

我的背景:

  • Eclipse IDE for Java Developers,版本:Oxygen.1a发行版(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();

    }

}
Run Code Online (Sandbox Code Playgroud)

因为而不会编译

The type com.sun.javafx.scene.control.LambdaMultiplePropertyChangeListenerHandler is not accessible
Run Code Online (Sandbox Code Playgroud)

该怎么办?

看起来相似,但现在内部类;)已经编译,直到beta9支持的补丁530,但没有后 - 所以保持旧的氧气作为黄金宝...

注意:交叉发布到eclipse论坛

编辑:

刚刚在命令行上检查了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
Run Code Online (Sandbox Code Playgroud)

该错误类似于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
Run Code Online (Sandbox Code Playgroud)

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

how*_*ger 7

  1. Project> Properties:Java Build Path,Libraries选项卡中,选择节点Modulepath/JRE系统库[JavaSE-9]/是模块化,然后单击Edit ...
  2. 在" 模块属性"对话框的" 详细信息"选项卡的" 添加的导出"部分中,单击" 添加..."并输入以下内容:
    • 来源模块: javafx.controls
    • 包: com.sun.javafx.scene.control
  3. 单击" 确定"两次以关闭" 添加导出"配置和" 模块属性"对话框,然后单击"应用并关闭"以关闭" 属性"对话框

在此输入图像描述


小智 4

好吧,它有点隐藏:

  • 打开项目的Java 构建路径对话框
  • 选择选项卡
  • 选择isModular条目
  • 使用编辑...按钮打开模块属性对话框
  • 选择详细信息选项卡
  • 使用“添加..”按钮创建所有必需的条目

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