1

假设我在Process课堂上运行一个程序,例如:

Process p1 = Runtime.getRuntime().exec("setup.exe");
try {
    p1.waitFor();
} catch (InterruptedException e) {
    //Whatever
}

然后我的GUI课堂上也有一个取消按钮,类似于:

private void cancelButtonActionPerformed(ActionEvent e) {
    //Need to interrupt the thread from here!
    System.exit(0);
}

只需按原样退出程序,我创建的 setup.exe 进程就会继续Process.java运行,这是一个问题。通常我会打电话p1.destroy(),但我在两个班级之间建立联系时遇到了问题。

我们欢迎所有的建议!

编辑:

private void beginThread() {
        SwingWorker<String, Void>  myWorker = new SwingWorker<String, Void>() {
            @Override
            protected String doInBackground() throws Exception {
                //Do some stuff
            }
        return null;
        }
    };
    myWorker.execute();
}
4

1 回答 1

2

假设您在单独的线程中运行该进程,您可以processThread.interrupt()从您的 GUI 类中调用。

然后,您只需将 try/catch 修改为:

try {
    p1.waitFor();
} catch (InterruptedException e) {
    Sys.err(e.toString());
    //don't ignore the exception:
    p1.destroy();
    Thread.currentThread.interrupt(); //reset interrupted flag
}
于 2013-08-05T16:23:14.343 回答