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()が、2 つのクラス間の接続に問題があります。

どんな提案でも大歓迎です!

編集:

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 に答える