我使用Vaadin框架来创建我的Web应用程序GUI。
我有一个Vaadin按钮,其点击侦听器代码可能会引发应用程序自定义异常。在应用程序代码的其他方面,这个异常会一直抛到我的自定义窗口类,它集中处理。我想在这里做类似的事情:在clickListener代码中抛出此异常,因此我可以在窗口类的自定义终端错误处理程序中捕获它。由于click侦听器类没有抛出任何异常,我无法在那里抛出异常,我想我将不得不在本地处理异常。由于我不想在按钮单击侦听器级别处理异常,我想我会将它转发到我的自定义窗口类。像这样:
Button btnNew = new Button("New", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
try {
doThingThatThrowsException();
} catch (Exception exc) {
window.handleCustomException()
}
}
});
这是使用Vaadin集中处理自定义异常的常用方法吗?
答案 0 :(得分:1)
我无法回答是否是处理异常的通常的方式,但我们做了非常类似的事情。
根据听众的数量或频率,您还可以创建为您执行该委派的抽象侦听器。
e.g。
abstract class BasicListener {
protected void handleThrowable(Component.Event event, Throwable throwable) {
Window window = event.getComponent().getWindow();
if (window instanceof ExceptionHandlingWindow) {
((ExceptionHandlingWindow) window).handleException(throwable);
} else {
// Log it ? DO something, anyway.
}
}
}
abstract class ExceptionHandlingButtonClickHandler extends BasicListener implements Button.ClickListener {
@Override
public void buttonClick(Button.ClickEvent event) {
try {
handleClick(event);
} catch (Throwable e) {
handleThrowable(event, e);
}
}
protected abstract void handleClick(Button.ClickEvent event);
}
Button btnNew = new Button("New", new ExceptionHandlingButtonClickHandler() {
@Override
protected void handleClick(Button.ClickEvent event) {
doThingThatThrowsException();
}
});