1

在 JRE X 中设计和编译的程序在 JRE Y, Y 中运行时将如何运行

它会根本不运行,一启动就终止,还是会一直运行直到遇到 JRE Y 中不存在的方法或类然后崩溃?

如果是后者,我可以在启动时进行版本检查并通知用户他需要更新他的 Java 才能运行程序(如果他有 JRE Y)。

如果这不起作用,还有其他方法吗?

4

1 回答 1

3

如果一个程序是用 Java X 构建的,并以 Java > X 运行,那么它将毫无问题地运行。

如果一个程序是用 Java X 构建并在 Java < X 下运行的,那么当加载不兼容的程序类时,该程序可能会在执行期间的任何时候正常运行或意外终止。

程序类不兼容可能有两个原因:

  1. 它引用了以前版本的 Java 中不可用的系统类。在这种情况下,您将看到 NoClassDefError。

  2. 它使用了以前版本的 Java 中没有的语言特性。在这种情况下,您将看到 ClassFormatError。

您可以通过引用System.getProperty("java.version")返回的数据来实现 Java 版本检查器。为确保检查器本身不会运行失败,您应该使用您期望遇到的最低 Java 版本对其进行编译。您必须进一步确保在对应用程序的其余部分进行任何代码引用之前尽早进行检查。这可能意味着在检查器中使用Java 反射在成功检查时调用主程序类。

于 2012-11-20T01:57:45.387 回答