有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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返回非零

再次明确一点:这是一个测试/基准框架;停止必须由框架启动,而不是通过修改小程序。我们有很多小程序要测试/运行,框架必须一个接一个地运行它们,而不需要用户交互

我考虑过的方法有:

  1. 列出其WM_CLASS属性包括sun applet main的窗口,然后 在执行()之后,并区分列表以确定哪些窗口 在执行后打开

  2. 编写我自己的appletviewer并制作它 接受SIGUSR1并关闭小程序,例如通过调用 destroy()方法

还有更好的建议吗


共 (1) 个答案

  1. # 1 楼答案

    appletviewer的-debug选项提供了一个答案:

     (echo run;sleep 5;echo exit) | appletviewer -debug embed.html
    

    我将在基准测试框架中这样做,但上面的shell命令表单更清楚地展示了这个想法

    更正原始问题:_NET_WM_PID属性是由Java1.7及更高版本中的appletviewer设置的。它不是由1.6和更早版本设置的