Остановка потока с помощью Jbutton (Java) - PullRequest
0 голосов
/ 22 сентября 2019

Я хочу сделать простое приложение.Но я хочу остановить поток с помощью кнопки.Этот код не работает.Я видел все веб-сайты таким образом.Я не понимаю, почему не работает.Тема начинается с 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??**
            }
        });

1 Ответ

1 голос
/ 23 сентября 2019

Проблема

У вас есть два открытых потока, возможно, три, если у вас есть один отведенный для пользовательского интерфейса.

Первый поток - тот, на котором запускается программа, а второй -быть там, где вы создаете случайный объект и цикл for.Когда вы вызываете «остановить поток», вы делаете это либо из основного потока, либо из третьего потока для пользовательского интерфейса.

Это означает, что

    Thread.currentThread().interrupt();

не закрывает правильный поток.

Решение

Для решения этой проблемы посмотрите на это GeeksForGeeks статья, в которой предлагается сохранить потоки в виде переменной, а затем вы можете надежно вызвать метод прерывания для нее.

...