从jdk跨平台删除JavaFX后会不会?

رام*_*لله 7 java cross-platform javafx release javafx-11

JavaFX 11是否跨平台?正如我在openjfx.org中看到的,我必须为每个平台下载版本.如果是这样,我可以以任何方式以跨平台形式使用它吗?我应该为每个java版本使用每个javafx版本吗?不要告诉我使用maven或类似的东西.我想编写一个跨平台的软件.而且每个操作系统的每个版本都没有多版本软件.我在检查操作系统后加载模块但我可以这样做吗?任何方式都有很多跨平台的库,即使它有本机代码,为什么OpenJFX不这样做呢?

Jos*_*eda 9

JavaFX 11不再是JDK的一部分,它现在以两种形式分发:

下载JavaFX SDK时,您必须选择一个平台,与为平台安装JDK时相同.它在API方面仍然是跨平台的,因此您的代码在每个平台上看起来都是一样的,但它在SDK /依赖性方面是特定于平台的.

原因是与每个SDK捆绑在一起的本机库.

如果您查看三个JavaFX 11 SDK包,每个压缩包都有大约40 MB:

  • Windows:压缩39.7 MB,dll库中64.8 MB(jfxwebkit.dll仅有59.2 MB),以及15.5 MB的jar和源代码.
  • Mac:39.7 MB压缩,dylib库中72.2 MB(libjfxwebkit.dylib仅有67.8 MB),以及15.6 MB的jar和源代码.
  • Linux:43.8 MB压缩,84.9 MB在这样的库中(libjfxwebkit.so只有80.1 MB),以及15.8 MB的jar和源代码.

现在的问题是:你会将三个平台捆绑在一起吗?总压缩大小为120 MB,三个平台大约220 MB的解压缩本机库?

在openjfx-dev邮件列表中确实存在关于这个问题的争论,但我认为采用的方法是正确的.

如果您使用Maven/Gradle并从Maven Central检索依赖项,则必须在Gradle上指定平台的分类器.请参阅"入门" 示例.Maven在内部完成它,所以即使你没有设置分类器,它也只为你的平台下载jar.

因此,对于一个普通的项目,你不使用的WebView,它可能是有意义的,因为你会为你的平台只下载所需模块的依赖:javafx.base,javafx.graphics,javafx.controlsjavafx.fxml.

但到目前为止,这并不是现在可以改变的东西,您可以使用与平台无关的JavaFX API,但使用特定于平台的JavaFX SDK /模块.

请注意,在分发JavaFX应用程序时,您将使用Jpackager,您将为这三个不同的平台发布三个不同的版本,因此无论哪种方式,您都需要特定于平台的分发.

  • 像往常一样,我向三个平台发布了一个jar.所以我必须为这三个平台分发一个版本.但据我所知,我必须从Maven下载JavaFX,JavaFX SDK将与依赖项捆绑在一起.如果这是对的,软件将不会像那样跨平台.这根本不是解决方案.这是否意味着JavaFX不会跨平台?目前我出于这个原因在Java 8上开发JavaFX项目,因为9+ Java版本不支持32位计算机.那安全吗? (3认同)
  • 正如我在回答中提到的,您将使用 Jpackager 为每个平台创建一个安装程序。但是,如果您想为所有平台创建一个分发单个 jar,您仍然可以这样做。在这个 [answer](/sf/answers/3685835401/) 中,我提到您也可以在一个 jar 中包含三个本机依赖项。 (2认同)