我在intellij中创建了一个javafx项目。我可以用intellij运行项目。我在配置中添加了以下代码):
--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml
但是project的output.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
命令行的最后一个错误日志:
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
p、 s:我可以在jdk-10上运行这个项目的.jar文件
编辑:
我下载了javafx并将其lib文件夹添加到系统环境中。为了将javafx添加到项目中,我做了以下过程:project structure>libraries>add>java>javafxpath/lib
然后我在这个过程中为输出jar文件创建了artifect:project structure>artifects>add>jar>from modules with dependencies>main class:main.main。
3条答案
按热度按时间m0rkklqb1#
我遇到过类似的问题:使用javafx和intellij导出/生成一个jar,使用gradle实现非模块化(https://openjfx.io/openjfx-docs/)
我使用gradle jar命令生成的jar没有运行,并且抛出错误,说它找不到我的主类。当我打开jar时,我可以找到我的主类。所以我意识到这个错误与jar Package 有关。
我通过将javafxsdk添加到intellij中的javasdk修复了这个问题,如下所示。
在此之后,我使用常规的gradle build jar命令生成jar文件(如下所示),并且它正常运行。
ar5n3qh52#
最简单的方法是使用包含javafx的openjdk构建。bellsoft和azul都生产这样的产品。
对于azul的祖鲁版openjdk:https://www.azul.com/downloads/zulu-community/?version=java-11-lts&package=jdk-fx
对于bellsoft liberica jdk:https://bell-sw.com/pages/downloads/#/java-11 lts并选择“full jdk”
这些构建基本上是openjdk,添加了openjfxjavafx模块。但是要小心,因为libericafx可能不支持javafx的某些方面。看到了吗https://bell-sw.com/pages/liberica-release-notes-11.0.9.1/
odopli943#
如果您有一个简单的(非模块化的)javafx11项目(没有maven/gradle构建工具),并且您正在使用intellij,就像这里的hellofx示例一样,那么您可以通过intellij创建一个jar,该jar可以从控制台运行
关于如何运行项目的完整教程可以在这里找到,关于如何创建jar的说明也可以在这里找到(参见非模块化项目一节),但是这些没有包括
Artifacts
来自intellij。检查hellofx项目是否使用以下vm选项从intellij运行:
哪里
PATH_TO_FX
已设置为File -> Settings -> Appearance & Behavior -> Path Variables
,指向JavaFXSDK库。半肥罐
我们可以创建一个jar,它只包含项目中的类和第三方依赖项,而不包含javafx依赖项。
去
File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies
,添加主类,接受。然后从列表中删除javafxjar,并接受。
构建项目时,它将创建一个非常小的jar(在本例中为3kb)。
现在您应该能够像这样运行它:
(确保
%PATH_TO_FX%
指向有效的文件夹,如果其中包含空格,请使用引号。您可以分发这个jar,并在其他平台上运行它,前提是这些平台也有javafxsdk。
肥罐
如果您想要一个包含javafx依赖项的全脂jar,您仍然可以使用工件。
去
File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies
,添加主类,接受。然后从列表中保留javafxjar,并接受。构建项目。
理论上,你应该能够像这样运行它:
但这行不通。
原因1:您需要一个启动器类,如这里所解释的。
所以创建一个启动器类:
原因2:如果您只将sdk jar添加到fat jar中,您将丢失本机库,如下所述。
因此,编辑工件,选择launcher类作为主类,并添加本机库(
Directory Content -> path-to/JavaFX SDK/bin
在windows上):现在构建项目(现在jar约为33MB,并且包含不必要的本机库)并运行:
您可以分发这个jar,但只能分发到windows平台。
如果您下载其他平台的javafxsdk,您可以为它们创建类似的jar;如果您将它们全部添加到一起,您还可以构建跨平台jar,如上面链接的答案所述。
无论如何,你应该考虑使用
jlink
相反。笔记
关于此错误:
原因:java.lang.classnotfoundexception:files\java\javafx-sdk-11.0.1\lib
看起来库路径设置时没有引号,并且缺少路径的第一部分
C:\Program Files\...
. 一定要用引号: