我有以下两个按钮:
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 :(得分: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有一个静态方法,你可能想要修复它(除非它代表一个变量,而不是一个类,在这种情况下你的名字应该以小写字母开头)。