在SWT中显示例外

时间:2011-01-24 08:26:52

标签: java exception swt jface

在SWT / Jface应用程序中,如何正确显示用户的异常?我使用log4j来记录异常,但是我需要向用户显示消息。

也许我可以使用与Eclipse中相同的消息框?但我不知道如何使用它。

问题是:如果发生多个异常,我想在一个唯一的消息框中列出所有异常,这样用户只需要点击一次即可关闭该框。

提前感谢。

4 个答案:

答案 0 :(得分:1)

你完全像在任何其他GUI框架中那样做:

绝不向用户提供例外

好的,简而言之,如果可能的话,处理应用程序内的异常。异常不是用户消息的包装器。这是一个应用程序内部信号,事情变坏了,应用程序无法像往常一样继续。消息和堆栈跟踪应帮助开发人员或管理员找到并解决问题。

如果有什么东西,那么可怜的用户需要知道(因为他可以改变某些东西,比如检查网络连接),创建一条消息,这是用户可以理解的(异常符合条件)并在消息框中显示这个。

将例外保留给日志文件以及知道如何阅读它们的人。


从另一条评论中,我读到了你的意图:在开发阶段展示更多细节。因此,您需要开发和生产代码的不同行为。您想添加一些 debug 代码,以便在出现错误时显示更详细的信息。

考虑实施应用程序范围的服务,该服务接收消息并将其呈现给用户。生产代码的实现呈现“用户友好”(本地化?)消息,而用于开发目的的实现也显示调试信息(完整错误消息)。

为了完美,您可以定义一个自定义扩展点,并在单独的捆绑包中将“调试扩展”添加到您的用户消息服务。因此,如果您不安装该捆绑包,则用户将无法获得扩展消息。

答案 1 :(得分:0)

您可以使用MessageBox。

    
  MessageBox messageBox = new MessageBox(shell, SWT.ICON_ERROR);
  messageBox.setMessage("error message");
  int result = messageBox.open();
  ...

“如果发生多个异常,我想列出一条唯一消息中的所有异常”

为什么要显示用户的例外列表?用户只需要有关错误的信息和消息以及避免或修复错误的方法。

您是否可以发布要打包的例外列表或提供更多信息?

答案 2 :(得分:0)

我只能支持Andreas_D和yeraycaballero的答案。如果您向他显示例外情况,用户将会感到困惑。

这是另一个如何使用SWT消息框的示例: http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/DemonstratestheMessageBoxclass.htm

您还可以在官方Eclipse API文档中找到有用的信息: http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/MessageBox.html

答案 3 :(得分:0)

深入研究代码,为我提供了我想要的线索:

org.eclipse.core.runtime.SafeRunner org.eclipse.jface.util.SafeRunnable 这两个类是了解swt如何处理异常的良好起点/ JFace的。

可以这样使用:

    SafeRunner.run(new ISafeRunnable() {
      public void run() throws Exception {
           // code that throws exceptions...
      }
    });