Fil*_*ppo 0 java javafx java-8 java-17
我正在使用 IntelliJ 和OpenJDK 17创建 JavaFX 应用程序。项目语言级别设置为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"
Run Code Online (Sandbox Code Playgroud)
据我了解,此错误意味着我的代码是使用 Java 17 编译的,但我的 JRE 只能运行 Java 8 代码。我尝试使用 OpenJDK 运行 .jar,它可以工作。
提前致谢。
Bas*_*que 13
是的,您正确理解了这个问题:为 Java 17 编译的应用程序无法在 Java 8 运行时上运行。
\n你有选择:
\n现代 Java 提供了jlink和jpackage工具来帮助将 Java 运行时捆绑到您的应用程序中。Java平台模块系统可以将 Java 运行时精简为仅由应用程序实际使用的部分。
\n如果您觉得有必要并且有勇气,最先进的方法是使用Oracle 的GraalVM技术编译本机应用程序。
\n您评论道:
\n\n\n那么基本上没有适用于 java 17 的 JRE 吗?
\n
JRE(Java 运行时环境)正在成为 pass\xc3\xa9,因为 Oracle 不再期望最终用户一般在其系统上安装 Java 运行时。JRE 只是 JDK 的一个子集,删除了一些工具。
\n如果您如上所述捆绑 Java 运行时,则 JRE 无关紧要,因为新的现代工具将仅包含您的应用程序所需的部分。
\n您可以从多个供应商中的任何一个获得 Java 17 实现。这些供应商包括 Amazon、Azul Systems、Oracle、Microsoft、Adoptium、SAP、BellSoft、Pivotal、Red Hat/IBM、FreeBSD Ports & Packages。有些供应商提供支持,有些则不提供。有的收费,有的不收费。
\n顺便说一句,另一种选择是在不捆绑 Java 运行时且不使用 OpenJFX/JavaFX 库的情况下构建 JavaFX 应用程序。至少有两个供应商提供了包含 OpenJFX/JavaFX 库的 Java 运行时版本:Azul Systems (ZuluFX) 和 BellSoft (LibericaFX)。仅当您或您的客户能够控制用户\xe2\x80\x99 计算机(例如公司环境、学校等)时,此方法才可行。
\n我建议阅读这两份白皮书:
\n| 归档时间: |
|
| 查看次数: |
18636 次 |
| 最近记录: |