问题是:我有一个摇摆应用程序。只有一个表格有2个btns(“开始”,“停止”)。 在这些btns上,我添加了带有线程类的ActionListener。
当我点击btn“开始”并点击btn“停止”时,我想在新线程中开始一些工作。代码有点类似于这在控制台中可以正常工作,但在摇摆的doest中。任何帮助赞赏。提前致谢。 )
class Action implements ActionListener{
class MyThread extends Thread{
boolean live = true;
@Override
public void run() {
while(live)
System.out.println("doing...");
}
public void shutDown(){
live = false;
}
}
@Override
public void actionPerformed(ActionEvent e) {
JButton source = (JButton) e.getSource();
MyThread t = new MyThread();
switch (source.getText()) {
case "Start":
t.start();
break;
case "Stop":
t.shutDown();
break;
}
那个简单的形式
public class App extends JFrame {
public static void main(String[] args) {
App app = new App();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setVisible(true);
JButton btn1 = new JButton("Start");
JButton btn2 = new JButton("Stop");
app.getContentPane().add(btn1, BorderLayout.WEST);
app.getContentPane().add(btn2, BorderLayout.EAST);
Action action = new Action();
btn1.addActionListener(action);
btn2.addActionListener(action);
}
}
答案 0 :(得分:2)
每次单击按钮时都会创建一个新的Thread对象,因此您停止的线程与您启动的线程不同。您需要保留对在开始时创建的线程的引用,以便稍后再次停止它。