@Ernest3
Учусь программированию

Почему код не работает без else?

Почему если не написать else с sout то число не меняется
public class Main {
    static JFrame jFrame = getJFrame();
    static  int width = jFrame.getBounds().width;
    static  int height = jFrame.getBounds().height;

    public static void main(String[] args) {
        JLabel labelx = new JLabel();
        JLabel labely = new JLabel();
        jFrame.add(labelx);
        jFrame.add(labely);
        labelx.setText(jFrame.getBounds().width + " width");
        labely.setText(jFrame.getBounds().height + " height");
        jFrame.revalidate();
        while (true){
            if(width != jFrame.getBounds().width || height != jFrame.getBounds().height){
                labelx.setText(jFrame.getBounds().width + " width");
                labely.setText(jFrame.getBounds().height + " height");
                width = jFrame.getBounds().width;
                height = jFrame.getBounds().height;

            }else{
                System.out.println();
            }
        }
    }
    private static JFrame getJFrame(){
        JFrame jFrame = new JFrame();
        Toolkit tk = Toolkit.getDefaultToolkit();
        Dimension screensize = tk.getScreenSize();

        jFrame.setBounds(screensize.width/2-250,screensize.height/2-250,500,500);
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        return jFrame;
    }
}
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
При создании окна создаётся Event Dispatch Thread, внутри которого крутится бесконечный цикл, на каждой итерации достающий событие из очереди и запускающий обработчик для него. Бесполезно использовать циклы для изменения интерфейса, так как все изменения просто встанут в очередь и будут выполнены только на одной из следующих итераций цикла событий. А так как ваш бесконечный while работает на порядки быстрее, чем цикл Потока Обработки Событий, очередь событий просто забивается. System.out.println() - операция блокирующая, поэтому её вызов даёт время циклу событий разобрать очередь.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы