Thread.sleep (xx) а вся программа спит? - PullRequest
0 голосов
/ 29 января 2011

Эй .. у меня есть программа, которая регистрирует некоторых людей .. если у них есть отдел, программа покажет панель со списком ..

, поэтому я хочу установить панель не видимойчерез несколько секунд ... как я могу это сделать?

Я создал новый поток (FadeThread) и запустил его в представлении, но теперь, когда я пишу

Thread.sleep(5000)

весьпрограмма спит в течение этих 5 секунд, .. я только хочу ждать в фоновом режиме в течение 5 секунд и установить панель видимой (ложной), но весь пользовательский интерфейс и программа спит ..

Спасибо .. .

Ответы [ 3 ]

5 голосов
/ 29 января 2011

Thread.sleep() приостановит текущий поток, который, как я полагаю, является потоком диспетчера событий в вашем случае. Если вы делаете это в фоновом потоке, он должен работать, хотя, если вы случайно вызовете run() вместо start(), это не будет.

Чтобы выполнить код с заданной задержкой, вам придется использовать класс Timer. Намного чище, и вам не нужно беспокоиться о случайном создании слишком большого количества потоков, неправильном выходе из потока и т. Д.

3 голосов
/ 29 января 2011

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

Прочтите раздел из учебника по Swing на Параллелизм для получения дополнительной информации и потенциального решения.

1 голос
/ 29 января 2011

Если вы используете Swing, взгляните на класс SwingWorker .Вы можете создать процесс, который будет блокироваться на 5 секунд, а затем скрыть панель потокобезопасным способом.

В качестве альтернативы вы можете использовать ScheduledExecutor, если вы уверены, что запускаете его в EDT, используя * 1005.*.

...