Java swing - приложение удаляет кадры, когда мышь находится за пределами главного окна - PullRequest
0 голосов
/ 02 июля 2018

Я строю секундомер, используя Swing. Я помещаю метку в JFrame и меняю ее текст каждые 10 мсек, используя таймер. Но приложение работает нормально только тогда, когда курсор мыши находится над основной формой. Как только я вывожу мышь наружу, частота кадров медленно падает до 2 FPS - это выглядит как странная оптимизация внутри Swing.

При печати материала в System.out я обнаружил, что таймер по-прежнему срабатывает каждые 10 мс, а JLabel перекрашивается также каждые 10 мс - я не знаю, где искать причину проблемы.

Вот минимальный пример, демонстрирующий проблему:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test extends JFrame {

    public static void main(String[] args) {

        Test main = new Test();
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JLabel lbl = new JLabel("test");
        lbl.setPreferredSize(new Dimension(150, 50));

        new Timer(10, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                lbl.setText(Long.toString(System.currentTimeMillis()));
            }
        }).start();

        main.setLayout(new BorderLayout());
        main.add(lbl);
        main.pack();
        main.setLocationRelativeTo(null);
        main.setVisible(true);

    }

}

Метка обновляется плавно, когда курсор мыши находится над окном, но как только курсор покидает окно, метка обновляется дважды в секунду.

Обновление

Проблема воспроизводится с JDK 1.8.0_121, но не с 1.7.0_75. Это ошибка JDK? Могу ли я решить эту проблему без перехода на Java 7?

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