gpt4 book ai didi

JavaFX 警告 : Unsupported JavaFX configuration: classes were loaded from 'unnamed module @...'

转载 作者:行者123 更新时间:2023-12-04 13:08:47 45 4
gpt4 key购买 nike

我刚刚下载了 JavaFX 并进行了设置,其他什么都没做。我运行了示例代码,这是弹出的警告,尽管一切都已编译。我正在使用 IntelliJ。
这是在 Main.java 中:

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}


public static void main(String[] args) {
launch(args);
}
}
这是在 sample.fxml 中:
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>
运行时,一切都会编译,弹出窗口,但我收到标题中所述的警告。
我以前从未使用过 JavaFX,所以我不确定在哪里可以找到这个模块。

最佳答案

从技术上讲,JavaFX 仅支持作为命名模块加载。 As of version 16如果 JavaFX 最终出现在未命名的模块中,则会发出警告。也就是说,JavaFX 只支持从模块路径加载,不支持从类路径加载。您需要确保将 JavaFX 解析为模块,这至少可以通过以下三种方式之一完成:

  • 如果您的代码不是模块化的,那么将 JavaFX 放在 --module-path 上并确保将所需的模块添加到 --add-modules争论。例如,如果您的应用程序需要 javafx.controlsjavafx.fxml模块你会有类似的东西:
    java --module-path <path-to-fx> --add-modules javafx.controls,javafx.fxml ...
    javafx.graphicsjavafx.base这些其他模块需要模块,因此将被隐式拉入。
  • 如果您的代码是模块化的,那么您将拥有 module-info具有 JavaFX 模块需要指令的描述符。在这里,您只需将所有模块放在模块路径上,然后将应用程序作为模块启动。例如:
    module app {
    requires javafx.controls;
    requires javafx.fxml;

    // export Application subclass's package to at least javafx.graphics
    exports com.example.app to javafx.graphics;

    // open any FXML controller class' packages to at least javafx.fxml
    // ...
    }
    java --module-path <path> --module app/com.example.app.Main
  • 使用包含 JavaFX 的 Java 发行版。现在 JavaFX 是运行时镜像的一部分,并且会像运行时镜像中的任何其他 Java 模块(例如 java.base)一样作为模块自动加载。无论您的代码是否模块化,这都是正确的。尽管如果您的代码不是模块化的,那么您可能仍然需要 --add-modules .
    请注意,您可以通过 jlink 来利用这个想法。/jpackage部署应用程序时。

  • 如果您正在使用 IDE 和/或构建工具,并且您不知道在哪里设置 --module-path--add-modules参数,然后查看 Getting Started with JavaFX .如果您实际上不知道 Java 中有哪些模块,那么 Understanding Java 9 Modules给出了一个很好的概述。
    话虽如此,据我所知 当前 如果将 JavaFX 放在类路径而不是模块路径上,似乎会中断。除了一个警告:你的主类不能是 javafx.application.Application 的子类所以你需要创建一个单独的主类来简单地启动 JavaFX。换句话说,如果您真的想要,您可以忽略警告。但是我建议将 JavaFX 放在模块路径上(即使您自己的代码是非模块化的),如果您可以这样做而不会遇到太多麻烦。

    关于JavaFX 警告 : Unsupported JavaFX configuration: classes were loaded from 'unnamed module @...' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67854139/

    45 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com