4

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

例如,我有一个功能,可以将用户新创建的公司保存在(嵌入式)数据库中。

保存新创建公司的函数抛出 3 个异常:

IllegalArgumentException:如果公司或非空字段为空(手动检查并抛出)。

EntityExistException: 如果公司(它的名字)已经存在。(也手动检查并抛出)。

PersistenceException: 如果尝试保存时出现问题。(捕获并重新抛出)。

调用该saveCompany方法的函数会捕获所有 3 个异常,然后记录它们并向用户显示发生错误的对话框。

我现在想知道我是否需要抓住它们?或者让他们跑到globalExceptionHandler(我也可以看到他们的地方)可以吗?我也想知道我的反应应该是什么?

我应该告诉用户出现错误并让程序运行(因为程序的其他部分应该正常运行)还是应该告诉他然后结束程序(因为这是一个不应该出现的程序员错误) ?

4

3 回答 3

4

所以好消息是你问了所有正确的问题。

我应该告诉用户有一个错误并让程序运行(因为程序的其他部分应该正常运行)还是应该告诉他然后结束程序(因为这是一个不应该出现的程序员错误) ?

这是您需要仔细考虑的设计问题。如果这是一个可恢复的错误并且程序无法继续运行,那么程序应该在用户没有选择的情况下关闭。如果程序的一部分必须终止,但其他部分可能会终止,则应通知用户。如果用户需要修复一些数据以便程序可以运行,则应告知用户。等等。是的,尽管您提出了正确的问题,但您实际上必须考虑它们并保持明智。

于 2012-10-12T16:17:11.713 回答
4

In case of the IllegalArgumentException you should catch the exception and tell the user to correct the data (do not print the stacktrace).

In case of the EntityExistException the user should be informed that the company already exists, and perhaps he or she should consider updating it.

When the user receives the PersistenceException they should be presented with a dialog window with the stacktrace (and perhaps other data relevant for the developer) and informed to submit a bug report.

于 2012-10-12T16:29:35.810 回答
1

在我看来,请执行以下操作

EntityExistException:让用户知道实体已经存在。继续使用该应用程序。

PersistenceExceptionIllegalArgumentException:给用户一个通用的消息,并停止应用程序。

I hope you see the difference in how the above two exceptions are being handled. One is something that can be caused and fixed by the user. The other is something the user cannot do anything about.

于 2012-10-12T16:22:21.537 回答