如何使用Java 11运行已编译的Java 8 JavaFX应用程序jar?

问题描述

我有一个用Java 8编译的可执行jar文件,其中包含一个名为app.jar的JavaFX应用程序。

安装Java 8后,我可以简单地使用java -jar app.jar来运行它。

现在我只安装了Java 11,运行上面的命令会产生以下错误

Error: Could not find or load main class <...>
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application

因为Java 11不再包含JavaFX。

因此,我开始考虑安装JavaFX。 openjfx.org以两种形式提供JavaFx:SDK和JMOD文件

我认为我不需要SDK,因为我不是在创建JavaFX,而只是在运行JavaFX。剩下的就是JMOD文件

但是,the Oracle documentation on JMODs说:“ JMOD文件格式使您可以聚合.class文件,元数据和资源以外的文件。此格式可移植,但不能执行,这意味着您可以在编译时使用它。或链接时间,而不是在运行时”,因此似乎他们不会帮助我运行应用程序。

问题:

  • 如何在Java 11运行时中运行上面定义的app.jar
  • 是否有任何文档说明如何执行此操作,如果可以,那么在哪里?

解决方法

好像您错过了将PATH_TO_FX环境变量添加到系统中一样。 You can find a guide on how to do that here:

如果它是Java 8应用程序,那么最简单的选择就是getting Oracle JDK 8,并将其定义为系统环境中的JDK。