【发布时间】:2020-04-04 17:24:47
【问题描述】:
我有一个表格
public class MainFrame extends JFrame {
private int colThread=0;
MainThread mt=new MainThread("Поток - 1");
public MainFrame()
{
setSize(300,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jp = new JPanel();
JButton jb=new JButton("Запустить поток");
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
jb.setText("Перезапустить поток");
colThread = colThread + 1;
if (!mt.isInterrupted())
{
mt.interrupt();
}
mt.start();
}
});
jp.add(jb);
add(jp);
}
}
我有一个线程类:
public class MainThread extends Thread{
private int summ;
private String threadName;
public MainThread(String threadName)
{
this.threadName = threadName;
}
@Override
public void run() {
summ = 0;
while(true)
{
summ = summ +1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(this.threadName + " " + summ);
}
}
}
我有主课:
public class MainClass {
public static void main(String[] args) {
MainFrame mf = new MainFrame();
mf.setVisible(true);
}
}
问题是点击按钮时如何重启线程执行。以这种形式执行程序时,会出现错误,不过这是可以理解的,因为线程工作,不清楚为什么interrupt()不工作?
【问题讨论】:
-
如果你想杀死
MainThread并在用户点击JButton时重新启动它,那么调用方法interrupt()是不可行的。你见过这个问题吗? How do you kill a Thread in Java? -
不行,对象必须相同,必须运行start()方法。
-
你是说你被要求在同一个线程对象上多次调用
start()? -
是的,无法更改对象
标签: java multithreading swing