在活动JDK中找不到JavaFX部署库

时间:2018-08-23 13:54:37

标签: javafx netbeans java-11 javafx-11

我正在迁移到OpenJDK 11和OpenJFX11。我已经成功地从源代码构建了两者,并且按照OpenJFX Wiki,使用--with-import-modules = [path_to_modular_sdk] arg来构建JDK。一切顺利,直到我尝试在Apache Netbeans 9中构建一个简单的“ Hello World”测试项目为止;此时,我得到以下错误:“ 在活动JDK中找不到JavaFX部署库”。尝试搜索有关此信息,但找不到任何相关信息。如果有人能弄清是什么原因造成的,我将不胜感激。 谢谢你的帮助。 帕特里克。

3 个答案:

答案 0 :(得分:8)

@mipa指出,您无需构建Java 11或JavaFX 11即可迁移现有项目。

对于Apache NetBeans 9.0,JavaFX项目的当前ant构建文件尚不支持JavaFX 11。它一直在寻找JavaFX jar,并且在找不到它时将停止。这是过去(Java 8之前)的遗留方式,当时JavaFX不属于JDK,您必须手动添加jar。

例如,当您尝试创建一个新的JavaFX项目时,会出现此错误:

netbeans

但这并不意味着无论有没有NetBeans 9.0,您都无法运行JavaFX 11。

在终端上运行

您可以从终端运行Java / JavaFX 11项目。您可以按照此getting started指南进行详细操作。

简而言之,您只需要:

export PATH_TO_FX=/path/to/javafx-sdk-11/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX

其中HelloFX.java是:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String version = System.getProperty("java.version");
        Label l = new Label ("Hello, JavaFX 11, running on " + version);
        Scene scene = new Scene(new StackPane(l), 300, 200);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

模块化项目

在NetBeans 9.0上创建一个模块化项目,并添加一个模块(为简单起见,我将其命名为javafx11,这不是推荐名称)。

在添加代码之前,让我们将JavaFX库添加到模块路径。

JavaFX library

该库只是我在本地JavaFX下载的文件夹:/Users/<user>/Downloads/javafx-sdk-11/lib/。当然,如果您是自己建造的,则可以指向该位置。

现在我可以定义模块了:

module javafx11 {
    requires javafx.controls;

    exports javafx11;
}

并将上面的HelloFX类添加到javafx11包中。

现在该项目将运行正常。

即使您仍在使用ant,在这种情况下,构建文件也会更新为模块路径更改,并且没有JavaFX特有的内容,因此项目运行没有任何问题。

Java项目

如果模块化项目可行,那么 regular Java项目也将在NetBeans 9.0上运行。

创建一个 Java 项目(同样,不是一个 JavaFX 项目),将JavaFX库添加到上述的模块路径中,现在您需要添加这些用于编译和运行的VM选项:

 --module-path=/path/to/javafx-sdk-11/lib --add-modules=javafx.controls

项目应该运行正常。

JavaFX 11

Maven

另一种方法是使用Maven或Gradle代替ant。

只需创建一个Maven-> JavaFX项目,修改pom.xml文件并添加JavaFX依赖项即可:

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11-ea+23</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11-ea+23</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>11</release>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1.1</version>
                    <!--  Use newer version of ASM  -->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>javafx11.HelloFX</mainClass>
                </configuration>
        </plugin>
    </plugins>
</build>

从NetBeans清洁,构建和运行,它应该可以正常工作。

对于Gradle,如果包含NetBeans的Gradle插件,则可以完成同样的操作。

答案 1 :(得分:0)

您说要迁移到OpenJDK11 / OpenJFX11,但是为什么要通过自己构建JDK和JFX来开始这项工作呢?从这里http://jdk.java.net/11/和这里http://jdk.java.net/openjfx/下载EA版本会容易得多。 另外,从JDK11开始JavaFX不再是JDK的一部分,因此可以与JDK分开构建。我不确定您的构建说明是否最新。

答案 2 :(得分:0)

这是Netbeans 9的问题。我使用Sun JDK(现在是Oracle JDK)使用Netbeans已经很多年了。在Netbeans 7.2中,有一个选项可以手动添加JFX jar文件。然后,JFX被嵌入到Oracle JDK8中,该选项现在不可用。 几周前,我得知Oracle JDK明年将不再免费,因此我开始迁移到Open JDK10,并且遇到了与您相同的问题。这是因为Open JFX未嵌入到Open JDK中。如果尝试使用已经是GA的Oracle JDK11,则在构建JFX应用程序时不会有任何问题。问题是,当您在NetBeans中将Java平台设置为Open JDK时,它希望JFX位于JDK本身内,但是Netbeans不会要求您提供JFX文件夹或类似早期版本中的内容。