Java SWT:在异常处理程序中包装主循环?

pyt*_*ude 6 java swt

您可能知道,标准SWT主循环如下所示:

Display display = new Display();
Shell shell = new Shell(display);
...
shell.open();
while (!shell.isDisposed()) {
  if (!display.readAndDispatch()) {
    display.sleep();
  }
}
display.dispose();
Run Code Online (Sandbox Code Playgroud)

最近,我与一位同事争论是否将主循环包装在try-catch中是有意义的,如下所示:

Display display = new Display();
Shell shell = new Shell(display);
...
shell.open();
while (!shell.isDisposed()) {
  try {
    if (!display.readAndDispatch()) {
      display.sleep();
    }
  } catch (RuntimeException e) {
    // TODO Implement exception handler
  }
}
display.dispose();
Run Code Online (Sandbox Code Playgroud)

我的同事说这样做,如果GUI线程发生崩溃,你不必立即关闭应用程序,因此用户可能有机会在关闭程序之前保存他的数据.

所以你怎么看?做这样的事情有意义吗?

Dan*_*iel 6

这样做非常好,因为任何异常都可能出现在GUI代码中.我们在这个位置有一个通用的BugReport发送者,我喜欢它,因为什么都不会丢失,并且应用程序在错误报告之后继续工作(主要是;)).