【问题标题】:stopping an applet programmatically from outside从外部以编程方式停止小程序
【发布时间】:2013-10-07 23:15:34
【问题描述】:

我希望我能清楚地解释这一点。我想以编程方式从外部以“礼貌”的方式停止一个小程序,但仍返回状态代码 0。

更多细节:我正在开发一个测试/基准测试框架,该框架 exec()s "appletviewer embed.html" 并获取由此启动的进程的 pid。我一直在做的是等待五秒钟,然后打开 X 显示并搜索其 _NET_WM_PID 属性等于 pid 的窗口,并将 WM_DELETE_MESSAGE 发送到该窗口.但是,这只适用于 Java 1.5 及更高版本,因为 1.4 及更低版本没有设置 _NET_WM_PID 所以我找不到刚刚打开的窗口。

要明确一点:使用 signal() 不是我想要的,因为小程序的关闭应该是“正常的”,即不应该让 appletviewer 返回非零。

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

我考虑过的方法是:

  1. 列出 WM_CLASS 属性包括 sun-applet-main 的窗口,之前 在 exec() 之后,比较列表以找出哪些窗口 在 exec() 之后打开。

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

有更好的建议吗?

【问题讨论】:

    标签: java applet window exec


    【解决方案1】:

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

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

    我将在基准测试框架中这样做,但上面的 shell-command 形式更清楚地显示了这个想法。

    更正原始问题:_NET_WM_PID 属性由 Java 1.7 及更高版本中的 appletviewer 设置。 1.6 及更早版本未设置。

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2023-04-06
      • 2011-04-10
      • 2021-09-18
      相关资源
      最近更新 更多