@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() - операция блокирующая, поэтому её вызов даёт время циклу событий разобрать очередь.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽