为什么不是';将所有JavaFX Dep放在类路径中,而不考虑Java模块,这还不够吗? 我一直在尝试编写hello javax应用程序,并面临着必要的考虑java模块启动应用程序的问题。
F.e.javafx maven插件的运行目标生成这样的启动命令:为什么不是';将所有JavaFX Dep放在类路径中,而不考虑Java模块,这还不够吗? 我一直在尝试编写hello javax应用程序,并面临着必要的考虑java模块启动应用程序的问题。,java,maven,javafx,java-platform-module-system,Java,Maven,Javafx,Java Platform Module System,F.e.javafx maven插件的运行目标生成这样的启动命令: [DEBUG] Executing command line: [C:\java\zulu14.29.23-ca-jdk14.0.2-win_x64\bin\java.exe, --module-path, C:\.m2\repository\org\openjfx\javafx-base\14\javafx-base-14-win.jar; C:\.m2\repository\org\openjfx\javafx-base\
[DEBUG] Executing command line: [C:\java\zulu14.29.23-ca-jdk14.0.2-win_x64\bin\java.exe,
--module-path, C:\.m2\repository\org\openjfx\javafx-base\14\javafx-base-14-win.jar;
C:\.m2\repository\org\openjfx\javafx-base\14\javafx-base-14.jar;
C:\.m2\repository\org\openjfx\javafx-controls\14\javafx-controls-14-win.jar;
C:\.m2\repository\org\openjfx\javafx-controls\14\javafx-controls-14.jar;
C:\.m2\repository\org\openjfx\javafx-graphics\14\javafx-graphics-14-win.jar;
C:\.m2\repository\org\openjfx\javafx-graphics\14\javafx-graphics-14.jar,
--add-modules, javafx.base,javafx.controls,javafx.graphics,
-classpath, D:\project\target\classes, org.pkg.pkg.App]
但是我的项目结构没有提到Java模块功能——我没有模块信息.Java文件。为什么我不能将以上所有罐子都放在应用程序类路径中并感到快乐?
F.e.: 如果我是对的,并且正确理解规范
- 类路径中定义的模块JAR被视为未命名模块
- 未命名模块导出其所有包,即其中的所有内容都可见
Error: JavaFX runtime components are missing, and are required to run this application
有人能解释一下我错在哪里,关于Java模块是如何工作的吗
提前谢谢 警告:尽管下面显示了您想要的是可能的,但将JavaFX模块放在类路径上是不可能的。这意味着您应该将JavaFX放在模块路径上,即使您自己的代码是非模块的
您可以将JavaFX放在类路径上,完全忽略模块1。但是,需要注意的是,您的主类不能再分配给
javafx.application.application
2。解决方法是创建一个单独的主类,只需启动JavaFX应用程序。例如:
导入javafx.application.application;
公共类启动器{
公共静态void main(字符串[]args){
//将应用程序类替换为应用程序类的位置
Application.launch(YourApp.class,args);
}
}
一,。你不能完全忽略模块。类路径上的所有代码都以未命名模块结束,运行时映像中的所有模块(即JDK/JRE)仍然作为命名模块运行 二,。这是由于实现细节造成的。Java包含的代码允许您在不使用main方法的情况下启动JavaFX应用程序,只要main类可分配给
Application
。但是,当它检测到主类可分配给应用程序时,它会检查引导模块层中的javafx.graphics
——这意味着它必须位于模块路径上,如果不在模块路径上,则它会假定javafx丢失。警告:尽管下面显示了您想要的是可能的,将JavaFX模块放置在类路径上是不正确的。这意味着您应该将JavaFX放在模块路径上,即使您自己的代码是非模块的
您可以将JavaFX放在类路径上,完全忽略模块1。但是,需要注意的是,您的主类不能再分配给javafx.application.application
2。解决方法是创建一个单独的主类,只需启动JavaFX应用程序。例如:
导入javafx.application.application;
公共类启动器{
公共静态void main(字符串[]args){
//将应用程序类替换为应用程序类的位置
Application.launch(YourApp.class,args);
}
}
一,。你不能完全忽略模块。类路径上的所有代码都以未命名模块结束,运行时映像中的所有模块(即JDK/JRE)仍然作为命名模块运行
二,。这是由于实现细节造成的。Java包含的代码允许您在不使用main方法的情况下启动JavaFX应用程序,只要main类可分配给Application
。但是,当它检测到主类可分配给应用程序时,它会检查引导ModuleLayer
中的javafx.graphics
——这意味着它必须位于模块路径上,如果不在那里,则会假定javafx丢失
Error: JavaFX runtime components are missing, and are required to run this application