2012-03-11 155 views
2

我有以下两个按钮:停止正在进行的进程(线程)在Java中的按钮点击

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 。在这种情况下,我应该如何停止正在进行的线程?

回答

0

你必须将JButton的ActionListener的电话:

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

当然,你需要给StreamingExperiment这种方法,其内容都将取决于什么呢StreamingExperiment。如果它有一个循环,那么stop()可能会更改一个布尔值,用于退出循环。

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

5

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

t.interrupt(); 

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

StreamingExperiment.streamingExperimentMain(); 

其实呢?如果它执行CPU密集型操作,则该线程必须定期检查isInterrupted()标志并在恰好设置时终止。如果它在I/O上等待或睡觉,可能刚刚工作 - 请参阅InterruptedException

嗯,在技术上你can,但这种方法已被弃用的原因。