проблема с Java - PullRequest
       8

проблема с Java

1 голос
/ 17 сентября 2010

В моем приложении java swing у меня есть Jframe и Jlabel для отображения текущего времени. здесь я использую поток для отображения времени в jlablel, который добавляется в frame.my, я сомневаюсь, что когда я избавлюсь от jframe, что произойдет с потоком, независимо от того, запущен он или остановлен.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Если вы НЕ пометили свой поток как демон, вызвав yourThread.setDaemon(true), он продолжит работу, даже если основной поток в вашем приложении завершил работу. Помните, что вы должны позвонить setDaemon перед началом потока.

Подробности см. В моем ответе на предыдущий вопрос.

Я полагаю, что в вашем случае вы должны поддерживать флаг «стоп», который отслеживается вашим потоком таймера. Поток таймера должен выйти при чтении этого флага как «ложь». Вы можете добавить WindowListener в свой jframe и при закрытии окна установить флаг 'stop' на true

Вот пример кода для того, что я предлагаю:

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

public class JFrameTest {

  public static void main(String[] args) {

    final Timer t = new Timer();
    t.start();

    JFrame jf = new JFrame("GOPI");
    jf.setVisible(true);
    jf.setSize(100, 100);
    jf.addWindowListener(new WindowAdapter() {
      @Override
      public void windowClosing(WindowEvent e) {
        t.stopTimer();
      }
    });
    System.out.println("JFrameTest.main() DONE");
  }
}

class Timer extends Thread {
  boolean stop = false;

  @Override
  public void run() {
    for (int i = 0; i < 50; i++) {
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      if (stop)
        break;
      System.out.println("Counting :" + i);
    }
    System.out.println("Timer exit");
  }

  public void stopTimer() {
    stop = true;
  }
}
0 голосов
/ 17 сентября 2010

Ваш поток будет продолжать работать.

Вам нужно сделать то, что предложено Gopi, или вы могли бы использовать System.exit(0) в тесной работе вашего JFrame.

ПРИМЕЧАНИЕ. Я предполагаю, что Ваше приложение должно завершиться, если этот фрейм закрыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...