JavaFX警告:不支持的JavaFX配置:类是从';未命名模块@…';
我只是下载了JavaFX并进行了设置,我没有做任何其他事情。我运行了示例代码,这是弹出的警告,尽管所有内容都已编译。我在用IntelliJ 这在Main.java中:JavaFX警告:不支持的JavaFX配置:类是从';未命名模块@…';,java,javafx,Java,Javafx,我只是下载了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.Stag
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只支持作为命名模块加载。如果JavaFX在未命名模块中结束,则会发出警告。换句话说,JavaFX只支持从模块路径加载,不支持从类路径加载。您需要确保将JavaFX解析为模块,这至少可以通过以下三种方式之一实现:
--模块路径
上,并确保将所需的模块添加到--添加模块
参数中。例如,如果您的应用程序需要javafx.controls
和javafx.fxml
模块,您可能会有如下功能:
java——模块路径——添加模块javafx.controls、javafx.fxml。。。
javafx.graphics
和javafx.base
模块是这些其他模块所必需的,因此将被隐式拉入
moduleinfo
描述符,它需要JavaFX模块的指令。在这里,您只需要将所有模块放在模块路径上,然后作为模块启动应用程序。例如:
模块应用程序{
需要javafx.controls;
需要javafx.fxml;
//将应用程序子类的包导出到至少javafx.graphics
将com.example.app导出到javafx.graphics;
//打开任何FXML控制器类的包,至少打开javafx.FXML
// ...
}
java——模块路径——模块app/com.example.app.Main
Java.base
)。无论代码是否是模块化的,这都是正确的。虽然如果您的代码不是模块化的,那么您可能仍然需要——添加模块
注意:在部署应用程序时,您可以在jlink
/jpackage
中使用此思想
--模块路径
或--添加模块
参数,请签出。如果您实际上不知道Java中有哪些模块,那么可以给出一个很好的概述
尽管如此,据我所知,如果您将JavaFX放在类路径而不是模块路径上,那么当前的似乎没有任何问题。除了一个警告:您的主类不能是
javafx.application.application
的子类,因此您需要创建一个单独的主类来启动javafx。换句话说,如果你真的想忽略警告,你可以忽略它。但是我建议您将JavaFX放在模块路径上(即使您自己的代码是非模块化的),如果您这样做不会太麻烦的话。确切的错误是什么?我实际上是在遵循您为开始提供的第一个链接。我试图添加--模块路径“\path\to\javafx-sdk-16.0.1\lib”--将模块javafx.controls、javafx.fxml
添加到我的VM选项中,但我的代码没有编译,而是显示“启动层java.lang.module.FindException初始化期间出错:找不到模块javafx.controls”虽然我的外部库中有javafx.controls.jr,但不幸的是,我看到其他人出现了这个错误,尽管没有明显的原因。我还没有弄清楚在这种情况下是怎么回事,所以我不确定我能帮你什么,只是建议你仔细检查一下,确保一切都是正确的。老实说,如果您打算开发一个JavaFX应用程序,那么如果您使用一个包含JavaFX的JDK,您的生活将变得更加简单。据我所知,提供这种JDK的两个发行版是Azul的Zulu社区和BellSoft的Liberica。对于这两个版本,您必须选择包含JavaFX的版本。如果您尝试java-p--list modules
是否列出JavaFX模块?不确定我是否正确执行了此操作,但结果如下:>java-p\path\to\JavaFX-sdk-16.0.1\lib--list modules unrecogned option:-p错误:无法创建java虚拟机。错误:发生致命异常。程序将退出什么java-version
输出?请注意,-p
只是--模块路径
的简写。