JRE 发生了什么?

问题描述 投票:0回答:1
因此,我在 Debian PC 中编写了一个 Java Swing 应用程序,并使用 IntelliJ 将其编译为 JAR 文件。然而,虽然它在编码所在的系统上正常运行,但在其他 Windows 计算机上运行时会导致 Java 异常。当我在命令行上运行它以显示有关异常的更多详细信息时,这是输出:

-jar out.jar Exception in thread "main" 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(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

请记住,即使使用完全更新的 JRE,也会发生这种情况。

显然,在遇到这个问题后,我做了一些研究,我发现我必须将最新的 JDK 下载到我的 Windows 系统中,因为显然 Oracle 停止分发 JRE,因此在更新版本的 JDK 中编译的程序JDK 无法在未安装 JDK 的计算机上运行。 这似乎有效 - 安装所述 JDK 后,程序运行正常。

然而,这仍然是一个问题;不是直接为我,而是为那些最终可能使用我的软件的人。

例如,假设我编写了一个用 Java 编写的程序来帮助我的一个朋友处理他 PC 中的某些内容。由于他不是开发人员,因此他的 PC 上没有安装任何 JDK,只安装了他之前可能安装的 JRE。所以,为了让他可以运行我的程序,我必须让他在他的计算机上安装最新的 JDK,因为有一天使用我制作的程序的每个人也必须安装它,这对我来说似乎不太实用。

所以,总而言之,这整个情况让我非常困惑,特别是因为我在互联网上找不到任何东西可以真正清楚地解释 JRE 发生了什么 - 这就是我试图更好地理解的 - 到底发生了什么JRE?如果它真的停产了,是否意味着每个想要使用最近编写的java程序的人都必须安装JDK?或者这只是我所缺少的东西?也许与在Linux而不是Windows中编译有什么关系?

另外,我发现有些人说解决这个问题的办法就是将我的 JDK 降级到“最新”JRE 实际上支持的版本,但我只是觉得这不太有意义,因为我会缺少许多新的 Java 功能,有点违背了保持 Java 语言更新的目的。

那么,有人可以帮我澄清这一切吗?预先感谢!

java jvm
1个回答
0
投票
Oracle 是

Java™ 品牌的所有者,以及 Java 规范的发布者。

因此需要阅读此 Oracle 白皮书、2020 年 5 月的

Java 客户端路线图更新,以及相关博客文章。这标志着 Oracle 对其“Java Everywhere”战略的巨大转变。 Oracle 不再追求与每个主要操作系统捆绑。 相反,Oracle 希望桌面应用程序附带内部包含的 JVM

。为此,他们创建了

Java 平台模块系统 (JPMS),并制作了 jlinkjpackage 工具。如果您的应用程序是模块化的,您可以捆绑一个精简的 JVM,以仅包含您的特定应用程序实际使用的部分。 因此您可以从这个角度来看,对 JRE 的需求消失了。 JRE 只是一个 JDK

,没有构建/编译相关的工具。如果应用程序包含 JVM,并且用户不再需要将 Java 安装到其桌面计算机上,则不需要 JRE。

您应该知道,Oracle只是提供JDK产品的几家供应商之一。这些供应商包括 Azul Systems、Adoptium by Eclipse Foundation、IBM、Red Hat、BellSoft、Oracle、Amazon、Microsoft、SAP 等。他们所有的产品都经过彻底测试。大多数都很大程度上(如果不是完全的话)基于 Java 规范的

OpenJDK

代码库实现。 其中一些供应商选择提供其产品的 JRE 版本。此类产品在企业和教育等受控环境中可能很有用,其中 IT 管理部门可能希望在用户的计算机上部署和维护 JRE。

如果您决定确实需要 JRE,请检查所有 JDK 供应商的产品。请注意他们的许可条款。

© www.soinside.com 2019 - 2024. All rights reserved.