gpt4 book ai didi

java - 无法在针对 java 8 的 java 9 下构建 javafx 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:57 35 4
gpt4 key购买 nike

我正在尝试构建一个应用程序,该应用程序具有使用 JavaFX 构建的 GUI 并以带有 java 9 的新版本标志的 java 8 为目标。

编译

import javafx.application.Application;

public class Testing {
public static void main(String... args) {

}
}

当使用

定位 java 9 时
javac Testing.java

工作正常(在使用 --release 9 时也是如此),但是当我添加发布标志时

javac --release 8 Testing.java

编译失败给出不存在错误

Testing.java:1:error: package javafx.application does not exist

在JDK8 javac下编译没有问题。我试过使用 --add-modules 标志来添加 jfx 模块,但是在将版本设置为 8 时不允许使用该标志。

有没有办法让它在 java 9 下工作?它似乎不认为 jfx 包包含在 java 8 中,但它们是(至少在 oracle 的版本中)。

我在 Windows 上使用 java 9 的发布版本,并且在最新的 java 8 版本下构建相同的应用程序没有问题。


在使用 编译时,我尝试将我的 java 8 安装中的 jfxrt.jar(而不是 rt.jar)添加到类路径中——释放 8 标志,它确实有效。

我的理解是发布标志的一个目的是消除安装多个版本的 JDK(或至少是它们的 rt.jar 文件)的需要。我不确定其目的是仅消除针对该文件进行编译的需要,还是旨在消除针对任何 JDK 打包文件进行编译的需要(jfxrt.jar 是包含在 JDK8 中 [至少在 Oracle 的版本中] 不需要特殊标志或类路径修改即可使用它)。

在不确定意图的情况下,某些东西在 java 8 下可以完美编译但需要额外的 jar 在针对 java 8 的 java 9 下编译(并且只编译而不运行)似乎是错误的(但在针对 java 9 时不是),因此需要多个 JDK。对于任何更熟悉发布标志的预期实现的人,这应该以这种方式工作吗?

最佳答案

尽管就 --release 标志如何在内部解析所需的 jdk 内部类而言,该行为似乎很奇怪。但由于 *rt.jars 在 JDK9 中被删除并且 javafx.applicationjfxrt.jar 的一部分,这可能是相同原因的可能原因会提示丢失的包裹。


来自 migration guide 的编译部分尽管详细说明了 --release N 标志在概念上是一个宏,用于:

-source N -target N -bootclasspath $PATH_TO_rt.jar_FOR_RELEASE_N

因此它应该可以工作,如果你确实尝试这样的事情:

javac -source 8 -target 8 -bootclasspath some/path/to/jdk1.8.0_65.jdk/Contents/Home/jre/lib/rt.jar Testing.java

当然,替换上面的一个简单解决方案是将 jfxrt.jar 文件添加到类路径中,然后使用 --release 8 标志进行编译.


注意:我还是很疑惑为什么--release找不到之前版本的rt.jar? -- 可能需要检查任何此类报告的错误。

来自评论:- JavaFX 是 considered an included extension在 Java 8 中,so 在面向版本 8 时未解析。仅解析了 rt.jar 文件中的类。

关于java - 无法在针对 java 8 的 java 9 下构建 javafx 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46576066/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com