java 静态初始值设定项异常导致程序挂起

yftpprvb  于 2023-08-01  发布在  Java
关注(0)|答案(3)|浏览(109)

我有一个GUI应用程序。在我的主类中,我有一个方法(叫做createAndShow())来初始化我所有的GUI类。在每个GUI类中,我有static initializer来读取属性文件(资源包或配置文件)。如果一个文件或条目丢失或值错误,我会捕获异常,然后故意抛出一个MissingResourceException到上层。在main类的createAndShow()方法中,我放了一个try-catch来捕获Exception。但是JVM拒绝到达那里。每当一个文件丢失时,MissingResourceException就会抛出,然后应用程序就挂起了。我希望createAndShow()方法能够捕获该异常并优雅地退出。对于静态初始化器抛出的异常有什么特别的吗?
我使用的是XP和Java 1.6。

e7arh2l6

e7arh2l61#

静态初始值设定项由类装入器调用,而不是由任何用户代码调用。
您将无法捕获这些异常,并且由于无法加载所需的类,因此应用程序将崩溃。
我的建议是创建一个Configuration单例类。你可以使用What is an efficient way to implement a singleton pattern in Java?。在这个类中创建一个init()load()方法,它将能够抛出createAndShow()方法中可以捕获的异常。

p8h8hvxi

p8h8hvxi2#

静态初始化器块将在类加载时被调用。如果它抛出一个异常,类将不会被加载,你将得到一个NoClassDefFoundException。
您应该简单地记录错误,并在缺少资源时继续前进。或者,您不在静态初始化器块中执行加载,而是在一个单独的类中执行,该类的唯一目的就是加载这些资源包。

kulphzqa

kulphzqa3#

在静态初始化器块中抛出的异常会导致类不被加载,这意味着使用该类的调用类也不能被加载,除非您使用了一些非常小心的防御性编码技术。

相关问题