IntelliJ Exe 构建未按预期工作
IntelliJ Exe build not working as I expected
我正在开发一个 JavaFX 应用程序,它是一个会议应用程序。该应用程序 运行 与 IDEA 兼容。但我的目标是从我的应用程序构建一个 exe,它将 运行 独立。我已经配置了一个 Artifact 来构建 exe,我在其中设置了
的值
- 申请Class
- 标题
- 供应商
- 版本
- 本机包 (exe)
- 启用使用自签名密钥签名。
- 构建输出级别(默认)。
这样,我就可以成功构建exe文件了。当我安装这个 exe 时,它没有 运行。我的应用程序对其他 java 库有一些依赖性,我已将其包含在提取的输出根目录中。我发现,
- 当我 运行 安装的应用程序时,它什么都不做,只是简单地退出而没有错误。我也尝试过从 cmd 到 运行 exe,但这里也是一样。
- 当我尝试 运行 我的应用程序的 jar 文件时,它 运行 成功了。
尽管我在我使用的 MANIFEST 文件中添加了这两行,
Manifest-Version:1.0
Main-Class: sample.Main
我试过了
https://www.jetbrains.com/help/idea/packaging-javafx-applications.html
https://intellij-support.jetbrains.com/hc/en-us/requests/3231012?page=1
以及来自互联网的许多其他解决方案。但对我来说没有任何帮助。
如何调试此 exe 文件或我的项目以成功构建 exe?
有几种导出 Javafx 的途径。我假设您先将文件导出为 jar 文件,然后将其编译为可执行文件。
最简单的方法是在你的项目中设置JDK8:File -> Project Structure -> Project -> Project SDK,因为Oracle已经从编译器中移除了Javafx JDK 的最新版本。您可以从 here 下载 JDK 8。如果您选择使用 JDK 8,请确保在您的 IntellijIdea 导出页面上将其导出为 Jar 文件,而不是 Javafx 文件。
使用 Gradle 构建您的 Jar。 Gradle 将帮助您自动管理您的依赖项,我认为在 IntellijIdea 中设置它非常容易 - 您可以在启动项目的页面上设置它。
关于实际将其编译成 exe,我认为 this Whosebug post 会非常有用(您可能已经遇到过这个 post)。
导出java项目肯定是比较麻烦的。祝你好运!
谢谢你们。我已经解决了问题。
我的问题是,我正在使用
Platform.runLater(() -> {
//some code here
});
在主方法中调用 launch(args);
之前。如果我 运行 来自 IDEA 的程序(在我的例子中是 IntelliJ)或者如果我 运行 从命令提示符使用 java -jar MyJar.jar
的程序,这很好。但是当我从 exe 运行 它时它不起作用(在这种情况下发生异常
java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:273)
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:268)
at javafx.application.Platform.runLater(Platform.java:83)
).
如何调试
我必须将 main 方法的整个代码放在一个 try catch 块中,并且必须将异常写入文件或在控制台中打印异常。
解决方案
如果我输入 PlatformImpl.startup(() -> {});
并将我的代码更改为
PlatformImpl.startup(() -> {});
Platform.runLater(() -> {
//some code here
});
然后就可以了。
感谢
https://staticfinal.blog/2015/04/04/javafx-toolkit-not-initialized-solved/
我正在开发一个 JavaFX 应用程序,它是一个会议应用程序。该应用程序 运行 与 IDEA 兼容。但我的目标是从我的应用程序构建一个 exe,它将 运行 独立。我已经配置了一个 Artifact 来构建 exe,我在其中设置了
的值- 申请Class
- 标题
- 供应商
- 版本
- 本机包 (exe)
- 启用使用自签名密钥签名。
- 构建输出级别(默认)。
这样,我就可以成功构建exe文件了。当我安装这个 exe 时,它没有 运行。我的应用程序对其他 java 库有一些依赖性,我已将其包含在提取的输出根目录中。我发现,
- 当我 运行 安装的应用程序时,它什么都不做,只是简单地退出而没有错误。我也尝试过从 cmd 到 运行 exe,但这里也是一样。
- 当我尝试 运行 我的应用程序的 jar 文件时,它 运行 成功了。
尽管我在我使用的 MANIFEST 文件中添加了这两行, Manifest-Version:1.0 Main-Class: sample.Main
我试过了 https://www.jetbrains.com/help/idea/packaging-javafx-applications.html https://intellij-support.jetbrains.com/hc/en-us/requests/3231012?page=1 以及来自互联网的许多其他解决方案。但对我来说没有任何帮助。
如何调试此 exe 文件或我的项目以成功构建 exe?
有几种导出 Javafx 的途径。我假设您先将文件导出为 jar 文件,然后将其编译为可执行文件。
最简单的方法是在你的项目中设置JDK8:File -> Project Structure -> Project -> Project SDK,因为Oracle已经从编译器中移除了Javafx JDK 的最新版本。您可以从 here 下载 JDK 8。如果您选择使用 JDK 8,请确保在您的 IntellijIdea 导出页面上将其导出为 Jar 文件,而不是 Javafx 文件。
使用 Gradle 构建您的 Jar。 Gradle 将帮助您自动管理您的依赖项,我认为在 IntellijIdea 中设置它非常容易 - 您可以在启动项目的页面上设置它。
关于实际将其编译成 exe,我认为 this Whosebug post 会非常有用(您可能已经遇到过这个 post)。
导出java项目肯定是比较麻烦的。祝你好运!
谢谢你们。我已经解决了问题。
我的问题是,我正在使用
Platform.runLater(() -> {
//some code here
});
在主方法中调用 launch(args);
之前。如果我 运行 来自 IDEA 的程序(在我的例子中是 IntelliJ)或者如果我 运行 从命令提示符使用 java -jar MyJar.jar
的程序,这很好。但是当我从 exe 运行 它时它不起作用(在这种情况下发生异常
java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:273)
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:268)
at javafx.application.Platform.runLater(Platform.java:83)
).
如何调试
我必须将 main 方法的整个代码放在一个 try catch 块中,并且必须将异常写入文件或在控制台中打印异常。
解决方案
如果我输入 PlatformImpl.startup(() -> {});
并将我的代码更改为
PlatformImpl.startup(() -> {});
Platform.runLater(() -> {
//some code here
});
然后就可以了。
感谢
https://staticfinal.blog/2015/04/04/javafx-toolkit-not-initialized-solved/