java从外部以编程方式停止小程序
我希望我能解释清楚。我想以“礼貌”的方式从外部以编程方式停止一个小程序,该程序仍然返回状态代码0
更详细的信息:我正在开发一个测试/基准测试框架,exec()的“appletviewer embed.html”可以获得启动过程的pid。然后我一直在等待五秒钟,然后打开X显示屏,搜索一个属性等于PID的窗口,并向该窗口发送WM\u DELETE\u消息。然而,这只适用于Java 1.5及以上版本,因为1.4及以下版本没有设置\u NET\u WM\u PID,所以我找不到刚刚打开的窗口
需要明确的是:使用signal()不是我想要的,因为小程序的关闭应该是“正常的”,即不应该使appletviewer返回非零
再次明确一点:这是一个测试/基准框架;停止必须由框架启动,而不是通过修改小程序。我们有很多小程序要测试/运行,框架必须一个接一个地运行它们,而不需要用户交互
我考虑过的方法有:
列出其WM_CLASS属性包括sun applet main的窗口,然后 在执行()之后,并区分列表以确定哪些窗口 在执行后打开
编写我自己的appletviewer并制作它 接受SIGUSR1并关闭小程序,例如通过调用 destroy()方法
还有更好的建议吗
# 1 楼答案
appletviewer的-debug选项提供了一个答案:
我将在基准测试框架中这样做,但上面的shell命令表单更清楚地展示了这个想法
更正原始问题:_NET_WM_PID属性是由Java1.7及更高版本中的appletviewer设置的。它不是由1.6和更早版本设置的