2

我使用 Vaadin 框架来创建我的 Web 应用程序 GUI。

我有一个 Vaadin 按钮,它的单击侦听器代码可能会引发应用程序自定义异常。在应用程序代码的其他点中,此异常一直被抛出到我的自定义窗口类,在那里它被集中处理。我想在这里做类似的事情:在 clickListener 代码中抛出这个异常,这样我就可以在窗口类的自定义终端错误处理程序中捕获它。由于单击侦听器类不会引发任何异常,因此我无法在那里引发异常,我认为我将不得不在本地处理异常。由于我不想在按钮单击侦听器级别处理异常,我想我会将它转发到我的自定义窗口类。像这样的东西:

Button btnNew = new Button("New", new Button.ClickListener() {
  public void buttonClick(ClickEvent event) {
    try {
        doThingThatThrowsException();
    } catch (Exception exc) {
        window.handleCustomException()
    }
  }
});

这是使用 Vaadin 集中处理自定义异常的常用方法吗?

4

1 回答 1

1

我无法回答这是否是处理异常的常用方法,但我们做的事情非常相似。

根据监听器的数量或您必须执行此操作的频率,您还可以创建抽象监听器来为您执行该委托。

例如

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();
  }
});
于 2012-09-20T08:57:00.737 回答