我对如何在GUI应用程序中处理未经检查的异常感到有点迷失。
我是具有将用户新创建的公司保存在(嵌入式)数据库中的功能。
保存新创建的公司的功能会抛出3例外:
IllegalArgumentException
:如果公司或非空字段为空(手动检查并抛出)。
EntityExistException
:如果公司(它的名字)已经存在。 (也手动检查并抛出)。
PersistenceException
:如果在尝试保存时出现问题。 (抓住并重新投入)。
调用saveCompany
方法的函数捕获所有3个异常,然后记录它们并向用户显示发生错误的对话框。
我现在想知道我是否需要抓住它们?或者只是让它们跑到globalExceptionHandler
(我也能看到它们)可以吗?
我也想知道我的反应应该是什么?
我应该告诉用户是否有错误并让程序运行(导致程序的其他部分应该正常运行)或者我应该告诉他然后结束程序(因为它是程序员错误,不应该是在那里)?
答案 0 :(得分:4)
所以好消息是你要问所有正确的问题。
我应该告诉用户是否有错误并让程序运行(导致程序的其他部分应该正常运行)或者我应该告诉他然后结束程序(因为它是程序员错误,不应该是在那里)?
这是一个需要仔细考虑的设计问题。如果它是可恢复的错误并且程序无法继续运行,则程序应在没有用户选项的情况下关闭。如果程序的一部分必须死亡但其他部分可能会死亡,则应通知用户。如果用户需要修复某些数据以便程序可以运行,则应该通知用户。等等,是的,你问的是正确的问题,你实际上必须考虑它们并且要明智。
答案 1 :(得分:4)
如果 IllegalArgumentException ,您应该捕获异常并告诉用户更正数据(不要打印堆栈跟踪)。
如果 EntityExistException ,应告知用户该公司已存在,并且他或她应考虑更新该公司。
当用户收到 PersistenceException 时,应该会看到一个带有堆栈跟踪的对话窗口(可能还有与开发人员相关的其他数据),并通知他们提交错误报告。
答案 2 :(得分:1)
在我看来,请执行以下操作
EntityExistException
:让用户知道该实体已存在。继续使用该应用程序。
PersistenceException
和IllegalArgumentException
:为用户提供一般信息,然后停止该应用。
我希望您看到上述两个例外处理方式的区别。一个是可以由用户引起和修复的东西。另一个是用户无法做任何事情。