我在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/