有程序认出它上次崩溃了吗?

Epa*_*aga 6 java error-handling crash-reports

让(Java)程序在上次运行时识别崩溃的最佳方法是什么,并显示一条消息"看起来这个程序上次崩溃了.请在这里报告此问题:bla@foo.com. ......"

有推荐的方法吗?(坏?)我的想法是:

  • 让程序在启动时存储临时密钥文件,然后在定期关闭时将其删除.如果文件在启动时存在,则显示该消息.
  • 在这种情况下识别死锁并存储"错误文件".如果启动时存在"错误文件",则显示错误消息并将文件移动到存档或类似内容中.

Aar*_*lla 7

Java程序崩溃有三个原因:

  • 未处理的RuntimeException.这是很容易使用,解决try-catchmain.
  • 未处理的错误.这些是罕见的,但也可以被捕获main.我常钓Throwablemain.请参阅下面的模板.
  • 如果你使用线程,那么看看Thread.setDefaultUncaughtExceptionHandler().
  • 虚拟机中的错误,或用户杀死的程序,或硬件暴力关闭.这些将导致无法捕获的崩溃.在这里,您最好的选择是在某处创建一个标记文件new File(...).deleteOnExit().如果有机会,Java会为你清理它.

死锁的问题是如何检测到您有死锁.我还没有看到一致的方法.

import org.apache.commons.lang.exception.ExceptionUtils;

public class Demo
{
    public static void main (String[] args)
    {
        try
        {
            Demo obj = new Demo ();
            obj.run (args);
            System.out.println ("Done.");
        }
        catch (Throwable t)
        {
            ExceptionUtils.printRootCauseStackTrace (t);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)