Mat*_*hew 7 java javac javafx-8 java-9
我正在尝试构建一个应用程序,该应用程序具有使用JavaFX构建的GUI,并使用java 9的新版本标记来定位Java 8.
编译
import javafx.application.Application;
public class Testing {
public static void main(String... args) {
}
}
Run Code Online (Sandbox Code Playgroud)
用java定位java时
javac Testing.java
Run Code Online (Sandbox Code Playgroud)
工作正常(也在使用时--release 9
),但是当我添加发布标志时
javac --release 8 Testing.java
Run Code Online (Sandbox Code Playgroud)
它无法编译给出不存在的错误
Testing.java:1:error: package javafx.application does not exist
Run Code Online (Sandbox Code Playgroud)
在JDK8 javac下编译时没有问题.我已尝试使用该--add-modules
标志添加jfx模块,但在将版本设置为8时不允许使用该标志.
有没有办法在java 9下完成这项工作?看来它并不认为jfx软件包包含在java 8中,但它们是(至少在oracle的发行版中).
我在Windows上使用java 9的发行版,并且在最新的java 8版本中构建了相同的应用程序而没有任何问题.
我尝试在使用标志进行编译时将java 8安装(而不是rt.jar)中的jfxrt.jar添加到类路径中,并且它确实有效.--release 8
我的理解是发布标志的一个目的是消除安装多个JDK版本的需要(或者至少是他们的rt.jar文件).我不确定是否只是为了消除编译这个文件的需要,或者意图是不需要针对任何JDK打包文件进行编译(并且jfxrt.jar包含在JDK8中[至少在Oracle的版本]不需要特殊标志或类路径修改来使用它).
在没有确定意图的情况下,某些东西在java 8下完全编译似乎是错误的,但是需要额外的jar来编译(并且只编译不运行)在针对java 8的java 9下(但是在针对java 9时不能),以及因此需要多个JDK.对于那些更熟悉发布标志的预期实现的人来说,这应该是这样的吗?
尽管就--release
标志内部如何解析所需的jdk内部类而言,这种行为似乎很奇怪.但是由于在JDK9中删除了*rt.jars并且这javafx.application
是其中的一部分jfxrt.jar
,这可能是为什么同样会抱怨丢失的包的原因.
迁移指南中的编译部分详细说明了该--release N
标志在概念上是一个宏:
-source N -target N -bootclasspath $PATH_TO_rt.jar_FOR_RELEASE_N
Run Code Online (Sandbox Code Playgroud)
因此,如果您确实尝试这样的事情,它应该可以工作:
javac -source 8 -target 8 -bootclasspath some/path/to/jdk1.8.0_65.jdk/Contents/Home/jre/lib/rt.jar Testing.java
Run Code Online (Sandbox Code Playgroud)
当然,替换上面的一个简单解决方案是将jfxrt.jar
文件添加到类路径中,然后使用--release 8
标志进行编译.
注意:仍然让我困惑为什么--release
找不到以前的版本rt.jar
? - 可能想检查任何此类报告的错误.
来自注释: - JavaFX被认为是 Java 8中包含的扩展,因此在定位版本8时无法解析.只解析了rt.jar文件中的类.
归档时间: |
|
查看次数: |
3137 次 |
最近记录: |