我了解这种错误的问题。我希望我的程序能够检测正在运行的Java版本,并向用户提供更加优雅的消息,而不是有些神秘的“异常线程”消息。我可以检测正在运行的Java版本,但似乎我的程序从未运行到检查代码。
简而言之...我的程序如何捕捉此错误、展示消息并正常退出?
我了解这种错误的问题。我希望我的程序能够检测正在运行的Java版本,并向用户提供更加优雅的消息,而不是有些神秘的“异常线程”消息。我可以检测正在运行的Java版本,但似乎我的程序从未运行到检查代码。
简而言之...我的程序如何捕捉此错误、展示消息并正常退出?
Error
类的后代,它继承了java.lang.ClassFormatError
,而后者又继承了java.lang.LinkageError
(它是java.lang.Error
的直接子类)。
当Java虚拟机尝试读取一个类文件并发现特定类文件中的主要和次要版本号不受支持时,就会抛出此错误。这种情况发生在使用比执行该类文件的JVM版本更高的Java编译器生成类文件的情况下。Errors
从未被检测到?我不理解你的陈述。它们可以在 try... catch (Error err) ...
中捕获。 - Andremoniymain()
。 - fge这个异常是从 ClassLoader
抛出的,所以我建议您编写自己的版本的 ClassLoader
,以便追溯此类错误。
更新:更具体地说,您可以尝试覆盖方法 defineClass
,在那里捕获此类异常并以方便的方式包装它。
更新2:正如我在评论中提到的,以及 us2012 重述了我的想法(感谢他),您必须使用低于用户VM版本的 -target
编译您的类加载器
try...catch
中也可以检测到错误。请阅读手册。 - Andremoniy-target
编译你的类加载器!你应该在你的答案中加入这个。 (另外,一个单独的.jar文件是否可以包含使用不同-target
编译的类?) - us2012