带Jbutton的线程停止(Java)

带Jbutton的线程停止(Java),java,multithreading,swing,jbutton,interrupt,Java,Multithreading,Swing,Jbutton,Interrupt,我想做一个简单的应用程序。但我想用一个按钮来停止线程。这个代码不起作用。我看到所有的网站都是这样的。我不明白为什么不工作。 线程以btnStart开头。 btnStop不工作。我编写了stopThread()函数用于停止。 这怎么能用另一种方式呢?有什么想法吗 private volatile boolean isRunning; ============== private void stopThread() { isRunning=false; Th

我想做一个简单的应用程序。但我想用一个按钮来停止线程。这个代码不起作用。我看到所有的网站都是这样的。我不明白为什么不工作。 线程以
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??**
            }
        });
private volatile boolean正在运行;
============== 
私有void stopThread(){
isRunning=false;
Thread.currentThread().interrupt();
}
============== 
私有最终void runThread(){
新线程(){
公开募捐{
同时(正在运行){
试一试{
随机r=新随机();
islemler[0]=“+”;
islemler[1]=“-”;
islemler[2]=“*”;
islemler[3]=“/”;
对于(int i=0;i)问题
您打开了两个线程,如果为ui预留了一个线程,则可能有三个线程

第一个线程是程序启动的线程,第二个线程是创建随机对象和for循环的线程。当您调用“停止线程”时,您是从ui的主线程或第三个线程执行此操作

这意味着

    Thread.currentThread().interrupt();
未关闭正确的线程

解决方案
要解决此问题,请参阅本文,其中建议将线程存储为变量,然后可以可靠地对其调用中断方法。

更正了格式。
while(isRunning&&!isInterrupted())