DrM*_*eza 8 java javafx openjfx java-11
我在IntelliJ中创建了一个JavaFX项目.我可以在IntelliJ中运行项目.我在配置中添加了以下代码:
--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml
Run Code Online (Sandbox Code Playgroud)
但是项目的输出.jar文件(由Artifects制作)不会运行.我测试了这些命令,但没有任何机会:
java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar Timer.jar
java --module-path %PATH_TO_FX% --add-modules javafx.controls Timer.jar
Run Code Online (Sandbox Code Playgroud)
命令行的上一个错误日志:
Error: Could not find or load main class Files\Java\javafx-sdk-11.0.1\lib
Caused by: java.lang.ClassNotFoundException: Files\Java\javafx-sdk-11.0.1\lib
Run Code Online (Sandbox Code Playgroud)
ps:在JDK-10上构建时,我可以运行这个项目的.jar文件
编辑:
我下载了JavaFX并将其lib文件夹添加到系统环境中.为了将JavaFX添加到项目中,我执行了以下过程:项目结构>库>添加> Java> JavaFxPath/lib
然后我在此过程中为输出jar文件创建了Artifect:项目结构> Artifects>添加> JAR>从具有依赖项的模块> main类:main.Main.
如果您有一个简单的(非模块化)JavaFX 11项目(没有Maven/Gradle构建工具),并且您正在使用IntelliJ,就像这里的HelloFX示例一样,这就是如何从IntelliJ创建一个可以从控制台
有关如何运行该项目的完全手册,可以发现在这里,并就如何创建一个罐子说明这里(见非模块化的项目),但这些并不包括Artifacts来自的IntelliJ.
检查HelloFX项目是否使用以下VM选项从IntelliJ运行:
--module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.fxml
Run Code Online (Sandbox Code Playgroud)
这里PATH_TO_FX已经设置File -> Settings -> Appearance & Behavior -> Path Variables,指向的JavaFX SDK库.
半脂肪罐子
我们可以创建一个Jar,它只包含项目中的类和第三方依赖项,但不包含JavaFX中的类.
转到File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies,添加您的主类,接受.
然后从列表中删除JavaFX jar,并接受.
构建项目,它将创建一个相当小的jar(在这种情况下为3 KB).
现在你应该可以运行它:
java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar out\artifacts\HelloFX_jar\HelloFX.jar
Run Code Online (Sandbox Code Playgroud)
(确保%PATH_TO_FX%指向有效文件夹,如果包含空格,则使用引号.
您可以分发此jar,并在其他平台上运行它,前提是那些也有JavaFX SDK.
胖罐子
如果你想要一个包含JavaFX依赖项的全脂jar,你仍然可以使用Artifacts.
转到File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies,添加您的主类,接受.
然后从列表中保留JavaFX jar,并接受.建立项目.
从理论上讲,你应该能够运行它:
java -jar out\artifacts\HelloFX_jar\HelloFX.jar
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
原因1:您需要一个发射器类,如解释在这里.
所以创建一个启动器类:
public class Launcher {
public static void main(String[] args) {
Main.main(args);
}
}
Run Code Online (Sandbox Code Playgroud)
原因2:如果只添加SDK罐子脂肪罐子,你会错过本机库,为解释在这里.
因此,编辑工件,选择Launcher类作为主类,并添加本机库(Directory Content -> path-to/JavaFX SDK/bin在Windows上):
现在构建项目(现在jar大约33 MB,并包含不必要的本机库)并运行:
java -jar out\artifacts\HelloFX_jar\HelloFX.jar
Run Code Online (Sandbox Code Playgroud)
您可以分发此jar,但仅限于Windows平台.
如果您下载他们的JavaFX SDK,您可以为其他平台创建类似的jar,如果将它们全部添加在一起,您也可以构建跨平台jar,如上面的链接答案中所述.
无论如何,你应该考虑使用jlink 替代.
注意
关于此错误:
引起:java.lang.ClassNotFoundException:Files\Java\javafx-sdk-11.0.1\lib
它看起来像是没有引号设置的库路径,它缺少路径的第一部分C:\Program Files\....请确保使用引号:
set PATH_TO_FX="C:\Program Files\Java\javafx-sdk-11.0.1\lib"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6881 次 |
| 最近记录: |