点击按钮,停止Java中正在进行的进程(Thread)

时间:2012-03-11 21:05:05

标签: java multithreading destroy

我有以下两个按钮:

 jButton2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {

            Thread t = new Thread() {
                public void run() {
                    StreamingExperiment.streamingExperimentMain();
                }
            };
            t.setName("runThread");
            t.start();

        }
    });

 jButton3.setText("Cancel");
    jButton3.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {

        }
    });

JButton3实际上是一个取消按钮,必须取消正在进行的StreamingExperiment。在这种情况下,我应该如何停止正在进行的线程?

2 个答案:

答案 0 :(得分:5)

你不能只停止任何线程 * 。您可以尝试interrupting

t.interrupt();

但线程必须能够处理它。这带来了一个问题,是什么:

StreamingExperiment.streamingExperimentMain();
实际上呢?如果它执行CPU密集型操作,则线程必须定期检查isInterrupted()标志,如果碰巧设置则终止。如果它等待I / O或睡眠,很可能只是工作 - 请参阅InterruptedException

嗯,从技术上讲,你是can,但这种方法因某种原因而被弃用。

答案 1 :(得分:0)

你有JButton的ActionListener调用:

jButton3.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        StreamingExperiment.stop();
    }
});

你当然需要给StreamingExperiment这个方法,其内容将全部取决于StreamingExperiment的功能。如果它有循环,则可能stop()可以更改用于退出循环的布尔值。

顺便说一下,看起来StreamingExperiment有一个静态方法,你可能想要修复它(除非它代表一个变量,而不是一个类,在这种情况下你的名字应该以小写字母开头)。