我们想在我们的应用程序日志中跟踪这些异常 - 默认情况下,Java只是将它们输出到控制台.
我不确定如何管理GUI中的异常; 我的目标是让用户知道是否出现问题,显示可理解的消息.
我想做这样的事情:
// I'm inside an actionPerformed() method
try {
// do whatever I have to do here
} catch (KnownBusinessException1 e) {
// inform the user and do something;
// most times simply inform the user that it wasn't possible to complete the
// operation and remain in the same window instead of moving forward.
} catch (KnownBusinessException2 e) {
// just as above
} catch (KnownDataAccessException1 e) {
// just as above
} catch (KnownDataAccessException2 e) { …Run Code Online (Sandbox Code Playgroud) 我有一个不小的多线程应用程序与GUI和套接字通信.在开发过程中,我发现有时会有一些异常没有被捕获和记录.如果有的话,我必须盯着控制台才能得到它们.
有没有办法在一个地方捕获来自不同线程(包括EDT)的未捕获的异常,在main()中说,并记录它们?我在main()中放了一个try-catch 来捕获Throwable,但它不起作用.
编辑:
更具体的,我有Executors.newCachedThreadPool()与Runnable接口秒.我不想在很多情况下使用Callable,因为我不想阻止我的调用线程.那么如何从Runnables中捕获异常?
同时,我怎么能赶上ü ncaught例外,从摇摆EDT?
我正在开发一个Swing应用程序,其中包含执行自定义绘制的组件 当我在绘制代码中犯了一些错误并抛出异常时,情况很难调试.弹出窗口显示异常信息,而不是被调试器捕获.此外,线程似乎重新启动,并且由于编码错误的结果异常,它会一次又一次地显示.
当我很幸运地切换到调试器时(这很困难,因为越来越多的弹出窗口随着应用程序获取绘制请求而不断出现),调试控制台会向我显示异常信息,例如:
严重:线程中抛出未捕获的异常[AWT-EventQueue-0,6,main]
....堆栈如下
我的应用程序是用Scala编写的,我使用的是IntelliJ IDEA 14.我的未被捕获的主线程异常由调试器处理得很好(我已Uncaught exception启用Any exception断点启用Java Exception Breakpoints),但AWT线程中的异常不是.
我已经尝试过安装一个处理程序,如下所述我如何检测Java中全局抛出异常的时间?回答,但我的处理程序似乎没有被触发.
我想实现以下(按重要性顺序):
(注意:虽然这是Scala应用程序,但我认为Java的行为是相同的,因此Java标记).
如果需要将异常转移到UI,处理异常的更好方法是什么.我需要使用什么:通过几种方法向用户显示适当的消息或从方法到方法返回错误代码或者其他可能的东西,抛出Checked/Unchecked(从哪个更好)
更新:
使用Android的Handler来处理所有已检查/未检查(可能只有它们)的异常是不是一个好主意,我不知道它们出现在哪里?
例如
...
catch(NUllPointerException){
UIExceptionHandler.sendEmptyMessage(...);
}
Run Code Online (Sandbox Code Playgroud)
...
onHandleMessage(...){
//handle exception here - for example show toast
}
Run Code Online (Sandbox Code Playgroud)
?