JRE X中运行的程序如何在JRE Y,Y中运行时如何运行
它根本不会运行,一旦它启动就会终止,或者它会一直运行,直到遇到JRE Y中不存在的方法或类然后崩溃?
如果是后者,我可以在启动时进行版本检查,并通知用户他需要更新他的Java才能运行程序(如果他有JRE Y)。
如果这不起作用,还有另一种方法吗?
答案 0 :(得分:2)
如果程序是使用Java X构建的并且使用Java运行> X,它可以正常运行。
如果程序是使用Java X构建的并且使用Java< X,当加载不兼容的程序类时,程序可能在执行期间的任何时候正常运行或意外终止。
程序类可能不兼容有两个原因:
它引用了以前版本的Java中不可用的系统类。在这种情况下,您将看到NoClassDefError。
它使用以前版本的Java中没有的语言功能。在这种情况下,您将看到ClassFormatError。
您可以通过引用System.getProperty( "java.version" )返回的数据来实现Java版本检查程序。为了确保检查器本身不会无法运行,您应该使用您期望遇到的最低版本的Java来编译它。您必须进一步确保在对应用程序的其余部分进行任何代码引用之前尽早进行检查。这可能意味着在检查程序中使用Java Reflection在成功检查后调用主程序类。