问题是:我有一个 swing 应用程序。只有一种形式有 2 个按钮(“开始”、“停止”)。 在这些 btns 上,我添加了带有线程类的 ActionListener。
我想在单击“开始”按钮时在新线程中开始一些工作,并在单击“停止”按钮时结束该工作。与此有点类似的代码在控制台中可以正常工作,但在 swing 中则不行。任何帮助表示赞赏。提前致谢。 )
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);
}
}
最佳答案
每次单击按钮时,您都会创建一个新的 Thread 对象,因此您停止的线程与您启动的线程不同。您需要保留对启动时创建的线程的引用,以便稍后可以再次停止它。
关于具有多线程的 Java Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464373/