Java : Throwable not caught

标签 java exception throwable

我在java中得到了这段代码:

    public static void main(String[] args) {
        try{
            Class tryLoadingClass = Class.forName("com.sun.deploy.uitoolkit.impl.fx.ui.MixedCodeInSwing");
    }
    catch (Throwable t){
        System.out.println("we caught a throwable");
    }  
}

我希望 catch Throwable 能够捕获任何异常 - 错误。但是,输出如下:

 java.lang.ClassNotFoundException: com/sun/deploy/ui/DialogTemplate
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:348)
 at com.sun.deploy.uitoolkit.impl.fx.ui.MixedCodeInSwing.<clinit> (MixedCodeInSwing.java:55)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:264)
 at testrandomjavacode.TestRandomjavaCode.main(TestRandomjavaCode.java:19)

为什么没有捕获异常以及如何捕获它?

最佳答案

您提供的堆栈跟踪显示问题实际上不在于直接加载 "com.sun.deploy.uitoolkit.impl.fx.ui.MixedCodeInSwing" 类,它确实发现那个。但是,在加载该类的过程中,它还尝试加载 com/sun/deploy/ui/DialogTemplate,而这就是它失败的部分。

我用谷歌搜索了“com.sun.deploy.uitoolkit.impl.fx.ui.MixedCodeInSwing”并找到了我认为是您尝试加载的此类的源代码。以下是特定代码行的链接,该代码行又尝试加载 DialogTemplate 内容:https://github.com/barchart/barchart-javafx-study/blob/master/barchart-oracle-javafx-2.2.7/src/main/java/com/sun/deploy/uitoolkit/impl/fx/ui/MixedCodeInSwing.java#L76

您会注意到该特定代码行已经在 try{} block 中,并且后面已经有一个 catch{} block ,它在您有机会捕获 ClassNotFoundException 之前捕获它,并打印堆栈跟踪在以下代码行:https://github.com/barchart/barchart-javafx-study/blob/master/barchart-oracle-javafx-2.2.7/src/main/java/com/sun/deploy/uitoolkit/impl/fx/ui/MixedCodeInSwing.java#L105

因此,总而言之,您尝试加载的类已经在您有机会之前捕获了错误,打印其堆栈跟踪,并且不会再次抛出错误,因此您无需捕获任何内容

关于Java : Throwable not caught,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47535765/

相关文章:

java - 启动更新检查程序线程,检查数据库中的新条目

java - 在凹/凸多边形内查找有界矩形

java - 创建一个不可关闭的 JOptionPane

java - 压缩后应用程序无法运行

c# - 是否有理由两次抛出异常?

C++ "Proper"异常处理方式

Java异常处理案例

Android 线程和 Throwable

java - 单击 fragment ListView 中的 TextView

Java Debugger 运行应用程序而不会中断