我有一个Java程序,它使用反射来查找和调用另一个Java程序的main(String [] args)方法。这个其他程序通常是一个Swing应用程序,往往会产生自己的线程。我想知道是否有办法确定其他“程序”何时终止。我不确定是否有检测到这个,因为它在与宿主程序相同的空间中执行。目前的方法只是检查是否有任何打开的框架不是我们自己的框架,而不是最好的解决方案。在我们访问它的过程中运行子程序也不是一个真正的选择。
编辑:看起来答案是双重方法。首先创建一个ThreadGroup并在作为该组成员的线程中启动子程序。然后确保检查Frame.getFrames()是否有任何帧属于子。
谢谢你, --Sandro
答案 0 :(得分:1)
在单独的ThreadGroup中启动子应用程序(可能最好将其设置为守护程序线程组)并定期检查它是否包含任何正在运行的线程或子组。
答案 1 :(得分:0)
如果你有办法发现这个子应用程序正在使用的窗口,你只需附加相应的Window监听器并等待所有关闭事件。
修改:
使用事件侦听器方法至少可以让您不经常循环和查询帧。 对于衍生线程的情况,我不知道。如果有一种方法可以跟踪自己的线程并发现应用程序的线程,则可以执行与帧相同的循环。
编辑2:
我想到的是自己使用JMX获取线程和其他信息,但我不太了解JMX。