IntelliJ Exe 构建未按预期工作

IntelliJ Exe build not working as I expected

我正在开发一个 JavaFX 应用程序,它是一个会议应用程序。该应用程序 运行 与 IDEA 兼容。但我的目标是从我的应用程序构建一个 exe,它将 运行 独立。我已经配置了一个 Artifact 来构建 exe,我在其中设置了

的值
  1. 申请Class
  2. 标题
  3. 供应商
  4. 版本
  5. 本机包 (exe)
  6. 启用使用自签名密钥签名。
  7. 构建输出级别(默认)。

这样,我就可以成功构建exe文件了。当我安装这个 exe 时,它​​没有 运行。我的应用程序对其他 java 库有一些依赖性,我已将其包含在提取的输出根目录中。我发现,

  1. 当我 运行 安装的应用程序时,它什么都不做,只是简单地退出而没有错误。我也尝试过从 cmd 到 运行 exe,但这里也是一样。
  2. 当我尝试 运行 我的应用程序的 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 文件,然后将其编译为可执行文件。

  1. 最简单的方法是在你的项目中设置JDK8:File -> Project Structure -> Project -> Project SDK,因为Oracle已经从编译器中移除了Javafx JDK 的最新版本。您可以从 here 下载 JDK 8。如果您选择使用 JDK 8,请确保在您的 IntellijIdea 导出页面上将其导出为 Jar 文件,而不是 Javafx 文件。

  2. 使用 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/