使用 Jbutton 停止线程 (Java)
Thread Stop with Jbutton (Java)
我想做一个简单的应用程序。但我想用一个按钮停止线程。此代码不起作用。我看到所有的网站都是这样的。我不明白为什么不工作。
线程以 btnStart
开头。
btnStop
不工作。我写了 stopThread() 函数来停止。
哪位这可以怎么办呢?任何的想法?
private volatile boolean isRunning;
==============
private void stopThread() {
isRunning=false;
Thread.currentThread().interrupt();
}
==============
private final void runThread() {
new Thread() {
public void run() {
while (isRunning) {
try {
Random r = new Random();
islemler[0] = "+";
islemler[1] = "-";
islemler[2] = "*";
islemler[3] = "/";
for (int i = 0; i <10; i++) {
islem1 = islemler[r.nextInt(4)];
islem2 = islemler[r.nextInt(4)];
islem3 = islemler[r.nextInt(4)];
islem4 = islemler[r.nextInt(4)];
txt1.setText("1"+islem1+"1");
txt2.setText("1"+islem2+"1");
txt3.setText("1"+islem3+"1");
txt4.setText("1"+islem4+"1");
Thread.sleep(150);
Thread.sleep(50);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
}
==============
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
isRunning=true;
runThread();
**This part is working**
}
});
==============
btnStop = new JButton("Stop");
btnStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stopThread();
**But this part is not working. Can you help??**
}
});
问题
您有两个线程打开,如果您为 ui 预留了一个,则可能是三个线程。
第一个线程是程序启动的线程,第二个线程是您创建随机对象和 for 循环的地方。当您调用 "stop thread" 时,您是从主线程或 ui 的第三个线程执行此操作。
这意味着
Thread.currentThread().interrupt();
没有关闭正确的线程。
解决方案
要解决此问题,请查看这篇 GeeksForGeeks 文章,其中建议将线程存储为变量,然后您就可以可靠地调用它的中断方法。
我想做一个简单的应用程序。但我想用一个按钮停止线程。此代码不起作用。我看到所有的网站都是这样的。我不明白为什么不工作。
线程以 btnStart
开头。
btnStop
不工作。我写了 stopThread() 函数来停止。
哪位这可以怎么办呢?任何的想法?
private volatile boolean isRunning;
==============
private void stopThread() {
isRunning=false;
Thread.currentThread().interrupt();
}
==============
private final void runThread() {
new Thread() {
public void run() {
while (isRunning) {
try {
Random r = new Random();
islemler[0] = "+";
islemler[1] = "-";
islemler[2] = "*";
islemler[3] = "/";
for (int i = 0; i <10; i++) {
islem1 = islemler[r.nextInt(4)];
islem2 = islemler[r.nextInt(4)];
islem3 = islemler[r.nextInt(4)];
islem4 = islemler[r.nextInt(4)];
txt1.setText("1"+islem1+"1");
txt2.setText("1"+islem2+"1");
txt3.setText("1"+islem3+"1");
txt4.setText("1"+islem4+"1");
Thread.sleep(150);
Thread.sleep(50);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
}
==============
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
isRunning=true;
runThread();
**This part is working**
}
});
==============
btnStop = new JButton("Stop");
btnStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stopThread();
**But this part is not working. Can you help??**
}
});
问题
您有两个线程打开,如果您为 ui 预留了一个,则可能是三个线程。
第一个线程是程序启动的线程,第二个线程是您创建随机对象和 for 循环的地方。当您调用 "stop thread" 时,您是从主线程或 ui 的第三个线程执行此操作。
这意味着
Thread.currentThread().interrupt();
没有关闭正确的线程。
解决方案
要解决此问题,请查看这篇 GeeksForGeeks 文章,其中建议将线程存储为变量,然后您就可以可靠地调用它的中断方法。