Обновление JFrame завершается неудачно из-за спящего потока - PullRequest
0 голосов
/ 02 апреля 2020

Я только что узнал, что функция рисования панели не вызывается, когда поток панелей спит сразу после вызова перерисовки.

Это вызывает только функцию paint(Graphics g) до 10%:

    super.repaint();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

1: Почему это происходит? Я думаю, что я читал, что Swing использует только поток компонента (основной поток).

2: Как это исправить, не вызывая thread-sleep из функции рисования?

1 Ответ

0 голосов
/ 02 апреля 2020

Большая часть Swing должна использоваться только из AWT Event Dispatch Thread (EDT). События AWT, включая рисование, отправляются в этом потоке.

Похоже, что код выполняется в EDT. Используйте javax.swing.Timer (никаких других Timer, которые вы можете видеть - хотя на самом деле repaint должен быть безопасен в другом потоке), чтобы установить себе обратный вызов.

...