Java 如何找出应用程序无法运行的原因';你不能完成死刑吗?

Java 如何找出应用程序无法运行的原因';你不能完成死刑吗?,java,eclipse,Java,Eclipse,我有一个应用程序,它有最后一个语句System.out.println(“Done”),它已写入,但此后程序仍在运行。我如何检查它为什么在运行 是否可以使用系统。退出(0) 应用程序仅使用一个(主)线程。完成后的一切是: System.out.println("Done."); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } 可能是数据库连接吗?当

我有一个应用程序,它有最后一个语句
System.out.println(“Done”),它已写入,但此后程序仍在运行。我如何检查它为什么在运行

是否可以使用
系统。退出(0)

应用程序仅使用一个(主)线程。完成后的一切是:

 System.out.println("Done.");

    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
}

}

可能是数据库连接吗?

当您认为程序已经完成时,生成一个线程转储,并查看输出以查看当前执行的位置。你可能会发现它不是你所期望的


在Unix上,您应该能够使用kill-QUIT命令(其中pid是您的进程id)执行此操作。我相信在Windows上,您可以使用Ctrl+Break来完成同样的操作。

我们刚刚遇到了一个类似的问题(尽管是在Ruby测试系统中)

事实证明,我们运行的子进程与父进程分离,挂起等待某些东西,但仍然保持标准输出打开,防止流监视循环终止,并保持进程活动


我通过在显然已挂起的进程上运行“lsof”找到了问题所在,看到它的管道仍然打开,并使用更多lsof跟踪这些管道。

你的应用程序是多线程的吗?如果没有看到你的代码,很难判断可能仍然有一个非守护进程线程在运行。打印“完成”后,请尝试列出所有正确选项:如果应用程序在一个JVM中运行,则可以使用System.exit(0)停止JVM。否则,您的应用程序在多个JVM实例上运行,那么您必须停止所有JVM实例。您可以发布代码吗?