Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java gui应用程序中的异常处理_Java_User Interface_Exception Handling_Unchecked - Fatal编程技术网

Java gui应用程序中的异常处理

Java gui应用程序中的异常处理,java,user-interface,exception-handling,unchecked,Java,User Interface,Exception Handling,Unchecked,我对如何处理GUI应用程序中未经检查的异常有点迷茫 例如,具有将用户新创建的公司保存在(嵌入式)数据库中的功能 保存新创建公司的函数抛出3个异常: IllegalArgumentException:如果公司或非空字段为空(手动检查并抛出) EntityExistException:如果公司(名称)已经存在。(也可以手动检查和抛出) PersistenceException:如果尝试保存时出错。(接住并收回) 调用saveCompany方法的函数将捕获所有3个异常,然后记录它们,并向用户显示一个发

我对如何处理GUI应用程序中未经检查的异常有点迷茫

例如,具有将用户新创建的公司保存在(嵌入式)数据库中的功能

保存新创建公司的函数抛出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处理。