在SWT / Jface应用程序中,如何正确显示用户的异常?我使用log4j来记录异常,但是我需要向用户显示消息。
也许我可以使用与Eclipse中相同的消息框?但我不知道如何使用它。
问题是:如果发生多个异常,我想在一个唯一的消息框中列出所有异常,这样用户只需要点击一次即可关闭该框。
提前感谢。
答案 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...
}
});