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

ibps3vxo  于 2022-11-10  发布在  Java
关注(0)|答案(3)|浏览(198)

我正在迁移到OpenJDK 11和OpenJFX 11。我已经成功地从源代码构建了这两个版本,并且根据OpenJFX wiki,我使用了--with-import-modules=[path_to_modular_sdk]参数来构建JDK。一切都很顺利,直到我尝试在Apache Netbeans 9中构建一个简单的“Hello World”测试项目;此时,我得到以下错误:“在活动JDK中未找到JavaFX部署库"。尝试搜索有关此问题的信息,但未找到任何相关信息。如果有人能阐明导致此问题的原因,我将不胜感激。感谢您的帮助。帕特里克。

unguejic

unguejic1#

正如@mipa所指出的,您不需要构建Java 11或JavaFX 11来迁移现有项目。
至于Apache NetBeans 9.0,JavaFX项目的当前Ant构建文件还不支持JavaFX 11。它总是在寻找JavaFX jar,如果找不到,它就会停止。这是旧时代(Java 8之前)的遗留问题,当时JavaFX不是JDK的一部分,您必须手动添加jar。
例如,当您尝试创建新的JavaFX项目时,将出现以下错误:

但这并不意味着您不能运行JavaFX 11,无论是否使用NetBeans 9.0。

正在终端机上执行

您可以从终端运行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本地下载下的文件夹:/Users/<user>/Downloads/javafx-sdk-11/lib/。当然,如果您自己构建了它,则可以指向该位置。
现在我可以定义模块:

module javafx11 {
    requires javafx.controls;

    exports javafx11;
}

并将上面的HelloFX类添加到javafx11包中。
现在,项目将运行得非常好。
即使您仍在使用ant,在这种情况下,构建文件也会根据模块路径的更改进行更新,并且没有任何特定于JavaFX的内容,因此项目运行时不会出现任何问题。

Java项目

如果模块化项目可以正常工作,则 * 常规 * Java项目也可以在NetBeans 9.0上正常工作.
创建一个Java项目(同样,不是 JavaFX 项目),如上所述将JavaFX库添加到模块路径中,现在您需要添加以下VM选项以进行编译和运行:

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

该项目应该运行良好。

"美芬"
另一种方法是使用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插件,也可以执行相同的操作。

tvz2xvvm

tvz2xvvm2#

这是Netbeans 9的一个问题。我在Netbeans上使用Sun JDK(现在是Oracle JDK)已经很多年了。在Netbeans 7.2中有一个手动添加JFX jar文件的选项。然后,JFX被嵌入到Oracle JDK8中,这个选项现在不可用。几周前,我被告知Oracle JDK明年将不再免费。所以我开始迁移到OpenJDK10,我遇到了和您一样的问题。这是因为OpenJFX没有嵌入到OpenJDK中。如果您尝试使用已经正式上市的OracleJDK11,构建JFX应用程序将不会有任何问题。问题是当您在NetBeans中将OpenJDK设置为Java平台,它希望JFX位于JDK本身内部,但Netbeans不会像在早期版本中那样要求您提供JFX文件夹或其他内容。

o2g1uqev

o2g1uqev3#

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

相关问题