首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法使用用Java 17编译的JRE 1.8_311运行JAR

无法使用用Java 17编译的JRE 1.8_311运行JAR
EN

Stack Overflow用户
提问于 2021-11-11 20:46:08
回答 1查看 8.3K关注 0票数 0

我正在使用JavaFX和OpenJDK 17创建一个应用程序。项目语言级别设置为17。在创建JAR (构建工件)之后,我尝试使用JRE 1.8.0_311来执行它。当我这样做时,我会得到这样的错误:

代码语言:javascript
代码运行次数:0
运行
复制
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,它可以工作。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 21:32:33

是的,您正确地理解了这个问题:为Java 17编译的应用程序不能在Java8运行时上运行。

你有选择:

  • 将运行时更改为Java 17。
  • 如果您的代码库不使用Java 9及更高版本的特性,则为Java 8编译应用程序。
  • 将Java运行时捆绑在应用程序中。这样在编译时就有了完全的控制,所以您可以在Java 17上运行的同时为Java 17编译。

现代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)。只有当您或您的客户控制用户的机器(如企业环境、学校等)时,这种方法才是可行的。

我建议阅读这两份白皮书:

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69934727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档