我正在使用JavaFX和OpenJDK 17创建一个应用程序。项目语言级别设置为17。在创建JAR (构建工件)之后,我尝试使用JRE 1.8.0_311来执行它。当我这样做时,我会得到这样的错误:
java.lang.UnsupportedClassVersionError: Main has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main"
据我理解,这个错误意味着我的代码是用Java 17编译的,但是我的JRE只能运行Java 8代码。我试着用.jar运行OpenJDK,它可以工作。
提前谢谢。
发布于 2021-11-11 13:32:33
是的,您正确地理解了这个问题:为Java 17编译的应用程序不能在Java8运行时上运行。
你有选择:
现代Java提供了http://openjdk.java.net/jeps/282 & https://openjdk.java.net/jeps/392工具,以帮助将Java运行时捆绑到应用程序中。通过https://en.wikipedia.org/wiki/Java_Platform_Module_System,可以将Java运行时简化到应用程序实际使用的部分。
如果你感觉到需要,并且有勇气,最先进的方法是用甲骨文的GraalVM技术编写一个本地应用程序。
你评论说:
基本上,java 17没有JRE吗?
JRE ()正在成为过去,因为Oracle不再期望最终用户在他们的系统上安装Java运行时。JRE只是JDK的一个子集,删除了一些工具。
如果像上面讨论的那样捆绑Java运行时,那么JRE就无关紧要了,因为新的现代工具将只包含应用程序所需的部分。
您可以从几个供应商中的任何一个获得Java 17实现。这些供应商包括亚马逊、阿祖尔系统、甲骨文、微软、阿佐门、SAP、BellSoft、Pivotal、Red /IBM、FreeBSD端口和软件包。有些供应商提供支持,有些则不提供支持。有些人收费,有些人不收费。
顺便说一句,另一种选择是构建您的JavaFX应用程序,而不需要绑定Java运行时,也不需要OpenJFX/JavaFX库。至少有两个供应商提供了包含OpenJFX/JavaFX库的Java运行时版本: Azul系统(ZuluFX)和BellSoft (LibericaFX)。只有当您或您的客户控制用户的机器(如企业环境、学校等)时,这种方法才是可行的。
我建议阅读这两份白皮书:
https://stackoverflow.com/questions/69934727
复制