Эй, я вижу, вы тоже читали книгу "Первая в голове" Java, хорошая книга, не так ли?
У меня была такая же проблема, когда я изучал главу 12 в той же книге .
Узнав о потоках в главе 15, я понял, почему овалы не «размазываются» по экрану.
Итак, прежде всего, о методе repaint()
.
Вызов метода repaint()
не вызывает мгновенно paintComponent(Graphics g)
в JPanel. Вместо этого он планирует вызов в поток рассылки событий для последующего использования.
Я не уверен, какой вывод вы получаете, поскольку вы не сообщили нам об этом.
Я при условии, что нет анимации вообще. Вероятно, когда вы запускаете его, на конечном экране появляется только один овал.
Если это так, то программа работает так. Вы запускаете l oop 150 раз, поэтому вы звонили repaint()
150 раз. Однако, как я уже говорил, repaint()
вызывает только расписание в потоке диспетчеризации событий, вместо того, чтобы мгновенно запускать paintComponent(Graphics g)
.
Это означает, что for l oop завершается до того, как paintComponent(Graphics g)
фактически получил вызов. Скорее всего, почему вы не получаете «Ошибка» в книге.
Как вы получаете «Ошибка»?
Попробуйте оставить нить спать дольше.