如何按下按钮,停止内部程序运行?

时间:2010-10-29 18:41:56

标签: java

(来自IDE-Style program running的个别问题)

2 个答案:

答案 0 :(得分:3)

您最好的选择可能是通过ProcessBuilder分离新的JVM。

然而,可以使用ThreadGroups终止内部程序(以及它产生的所有线程)。 (我不推荐它。它使用stop方法,根据文档“ 不推荐 。这种方法本质上是不安全的。 Thread.stop()了解详情。“):

public class Main {

    public static void main(String args[]) throws InterruptedException {

        ThreadGroup internalTG = new ThreadGroup("internal");
        Thread otherProcess = new Thread(internalTG, "Internal Program") {
            public void run() {
                OtherProgram.main(new String[0]);
            }
        };

        System.out.println("Starting internal program...");
        otherProcess.start();

        Thread.sleep(1000);
        System.out.println("Killing internal program...");

        internalTG.stop();
    }
}

class OtherProgram {

    public static void main(String[] arg) {
        for (int i = 0; i < 5; i++)
            new Thread() {
                public void run() {
                    System.out.println("Starting...");
                    try {
                        sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Stopping...");
                }
            }.start();
    }
}

输出:

Starting internal program...
Starting...
Starting...
Starting...
Starting...
Starting...
Killing internal program...

答案 1 :(得分:0)

  1. 在单独的JVM中运行代码。使用调试器接口来控制该JVM。
  2. 检测您要运行的类的字节代码。在适当的位置插入取消检查,以及捕获对全局JVM资源的访问权。
  3. 第二种选择可能是烦人的臭虫的无穷无尽的来源。