Java gui应用程序中的异常处理
我对如何处理GUI应用程序中未经检查的异常有点迷茫 例如,具有将用户新创建的公司保存在(嵌入式)数据库中的功能 保存新创建公司的函数抛出3个异常:Java gui应用程序中的异常处理,java,user-interface,exception-handling,unchecked,Java,User Interface,Exception Handling,Unchecked,我对如何处理GUI应用程序中未经检查的异常有点迷茫 例如,具有将用户新创建的公司保存在(嵌入式)数据库中的功能 保存新创建公司的函数抛出3个异常: IllegalArgumentException:如果公司或非空字段为空(手动检查并抛出) EntityExistException:如果公司(名称)已经存在。(也可以手动检查和抛出) PersistenceException:如果尝试保存时出错。(接住并收回) 调用saveCompany方法的函数将捕获所有3个异常,然后记录它们,并向用户显示一个发
IllegalArgumentException
:如果公司或非空字段为空(手动检查并抛出)
EntityExistException
:如果公司(名称)已经存在。(也可以手动检查和抛出)
PersistenceException
:如果尝试保存时出错。(接住并收回)
调用saveCompany
方法的函数将捕获所有3个异常,然后记录它们,并向用户显示一个发生错误的对话框
我现在想知道我是否需要抓住他们?或者让它们运行到globalExceptionHandler
(我也可以在那里查看它们)可以吗?
我也想知道我的反应应该是什么
我应该告诉用户出现了错误并让程序运行(因为程序的其他部分应该正常运行)还是应该告诉他然后结束程序(因为程序员的错误不应该出现在程序中)?好消息是你问的问题都是对的 我应该告诉用户有一个错误并让程序运行(因为程序的其他部分应该正常运行)还是应该告诉他然后结束程序(因为程序员的错误不应该在那里)
这是一个你需要仔细考虑的设计问题。如果这是一个可恢复的错误,并且程序无法继续运行,那么程序应该在用户没有选择权的情况下关闭。如果程序的一部分必须关闭,但其他部分可能会关闭,则应通知用户。如果用户需要修复某些数据以便程序可以运行,则应通知用户。等等。是的,你问的问题是正确的,但你确实需要考虑这些问题并保持明智。在我看来,做以下几点
EntityExistException
:让用户知道实体已经存在。继续使用应用程序
PersistenceException
和IllegalArgumentException
:向用户发送一般消息,然后停止应用程序
我希望您能看到上述两种例外情况处理方式的不同。一种是可以由用户引起和修复的。另一个是用户无法解决的问题。如果出现非法argumentexception您应该捕获异常并告诉用户更正数据(不要打印stacktrace)
在<强>实体存在异常< /强>的情况下,应该通知用户该公司已经存在,也许他或她应该考虑更新它。
当用户收到PersistenceException时,应该向他们显示一个带有stacktrace的对话框窗口(可能还有与开发人员相关的其他数据)并通知提交错误报告。我不会向用户显示堆栈跟踪,我会考虑任何匿名和/或安全传输,但这是合理的。我可以让我无法直接处理的异常(如PersistenceException)运行到globalExceptionHandler,还是在调用函数中捕获它们像另外两个?因为我有很多函数调用可以抛出这种期望的函数。因此,我想知道是否可以节省一些代码行(代码看起来也更干净,捕获块更少)。@LuGo认为客户看到这样的对话时会感到满意。@Maja-是的,尽可能晚地捕获它们,以GlobalExceptionHandler为例。由于这一点,您的代码不会膨胀。因此,我应该在调用函数中捕获PersistenceException和IllegalArgumentException,还是应该/可以让GlobalExceptionHandler处理它?这取决于以下几点:如果代码的任何其他部分引发PersistenceException和IllegalArgumentException。2:你想用同样的方式处理所有的问题吗?3.或者,您是否希望以更本地化的方式为saveCompany处理这些异常,然后可能会抛出一个新异常,其中包含更具描述性的消息,供GlobalExceptionHandler处理。