InvocationTargetException
是 Java 反射机制中的一个异常,通常在使用 Method.invoke()
或 Constructor.newInstance()
方法时抛出。当被调用的方法或构造函数内部抛出异常时,InvocationTargetException
会将原始异常包装起来,以便调用者可以获取并处理。
getCause()
方法可以获取原始异常,有助于定位问题根源。Method.invoke()
或 Constructor.newInstance()
直接抛出。假设我们有一个简单的 JavaFX 应用程序,其中一个按钮的事件处理器抛出了一个异常:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(event -> {
throw new RuntimeException("Error in event handler");
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
运行此程序时,按钮点击事件会抛出一个 RuntimeException
,该异常会被 JavaFX 框架捕获并包装成 InvocationTargetException
。我们可以通过以下方式处理:
btn.setOnAction(event -> {
try {
// 可能抛出异常的代码
throw new RuntimeException("Error in event handler");
} catch (Exception e) {
e.printStackTrace();
// 显示错误信息给用户
System.out.println("An error occurred: " + e.getMessage());
}
});
通过这种方式,我们可以捕获并处理原始异常,避免程序崩溃,并提供更好的用户体验。
领取专属 10元无门槛券
手把手带您无忧上云