11

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

编辑

我没有对此进行测试,但也许我们可以包含来自 maven 的所有系统的所有 javafx 依赖项
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>15.0.1</version>
    <classifier>win</classifier>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>15.0.1</version>
    <classifier>linux</classifier>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>15.0.1</version>
    <classifier>mac</classifier>
</dependency>
</dependency>
4

2 回答 2

17

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),jar 和源中 15.5 MB。
  • Mac:压缩后的 39.7 MB,dylib 库中的 72.2 MB(libjfxwebkit.dylib只有 67.8 MB),jar 和源中的 15.6 MB。
  • Linux:43.8 MB 压缩包,84.9 MB 在 so 库中(libjfxwebkit.so只有 80.1 MB),15.8 MB 在 jars 和源代码中。

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

正是在 openjfx-dev 邮件列表中对此问题进行了辩论,但我相信所采取的方法是正确的。

如果您使用 Maven/Gradle 并从 Maven Central 检索您的依赖项,则在 Gradle 上您必须为您的平台指定分类器。请参阅入门示例。Maven 在内部进行,因此即使您不设置分类器,它也只会为您的平台下载 jar。

因此,对于您不使用 WebView 的常规项目,这可能是有意义的,因为您将只下载平台所需的模块依赖项:javafx.basejavafx.graphics和. javafx.controlsjavafx.fxml

但到目前为止,这不是现在可以改变的,您获得了与平台无关的 JavaFX API,但具有特定于平台的 JavaFX SDK/模块。

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

于 2018-10-02T09:10:47.210 回答
-1

JavaFX 是用 Java 编写的,它运行在跨平台的 JVM 上。所以这意味着 JavaFX 也是跨平台的。

您下载不同的版本以在您的机器上运行 JVM。但是您的 JavaFX 代码可以在任何这些版本上运行,因此它是跨平台的。

于 2018-10-01T04:28:52.850 回答