странное поведение javax.swing.Timer - PullRequest
0 голосов
/ 05 февраля 2012

в основном, если используется следующий код

Timer timer = new Timer(200, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("boo");
    }
});

timer.start();
Thread.sleep(3000);

Бу будет печататься каждые 200 миллисекунд, как и ожидалось.

В то время как

Timer timer = new Timer(200, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("boo");
    }
});

timer.start();

ничего не будет выведено!

Ответы [ 4 ]

3 голосов
/ 05 февраля 2012

Предположительно код, который вы показываете, находится в main(). Когда main() возвращается, программа завершается до того, как поток таймера сможет начать работу. Спящий режим дает JVM достаточно времени для создания другого потока, что затем позволяет JVM продолжать работу.

1 голос
/ 06 февраля 2012

1) этот код работает и во всех случаях корректен

Timer timer = new Timer(200, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("boo");
    }
});    
timer.start();

необходимо проверить, имеет ли javax.swing.Timer # setRepeats () истинное значение (значение по умолчанию), если не изменено, в противном случае у вас есть код, который блокирует Поток рассылки событий , затем Swing's Timer тоже,

2) не использует Thread.sleep(int) во время EDT, и доЗакончился сон, вызвавший этот блок кода для EDT,

1 голос
/ 05 февраля 2012

Это полная программа (это единственный код в вашем main методе)? Если да, то во втором случае программа завершается до того, как таймер отключается, поэтому она ничего не печатает, потому что программа завершается почти сразу.

1 голос
/ 05 февраля 2012

Может ли быть так, что Thread.sleep находится в потоке main и что причина, по которой ничего не печатается во втором случае, заключается в том, что поток main завершается и программа завершается?

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