Вот фрагмент
kit.insertHTML(doc, doc.getLength(), "Hello", 0, 0, null);
try{
Thread.sleep(1000);
}catch(Exception e){}
Я использую HTMLEditorKit() и HTMLDocument() в качестве текстового поля. В текстовом поле должно отображаться "Привет", затем подождать одну секунду, однако, когда я пытаюсь это сделать, оно ждет одну секунду, а затем помещает слово "Привет", чего я не хочу.
Я не уверен, почему это происходит, потому что я поставил это в логическом порядке. Если кто-нибудь может помочь мне с этим, это было бы здорово.
РЕДАКТИРОВАТЬ:
Кто-нибудь знает альтернативу, чтобы я мог использовать эффект "задержки"?
Ответ 1 · рейтинг 6 · Hovercraft Full Of Eels
Никогда не вызывайте Thread.sleep(...) из потока событий Swing, так как это приведет к тому, что сам поток событий будет спать. Поскольку этот поток отвечает за рисование Swing и взаимодействие с пользователем, это переведет ваше приложение в спящий режим.
Если вам нужна только задержка отображения, рассмотрите возможность использования Swing Таймер.
Если, с другой стороны, ваш поток событий скомпрометирован длительной задачей, выполните задачу в фоновом режиме, используя SwingWorker (как предложил ему Гийом 1+).
Ответ 2 · рейтинг 3 · Guillaume Polet
Вы вызываете sleep в EDT (поток диспетчеризации событий). Вам следует избегать этой ситуации, так как она действительно замораживает пользовательский интерфейс.
Чтобы избежать этой ситуации, используйте SwingWorker. вместо этого или как предложено HFOE, используйте Swing Timer
Ответ 3 · Extreme Coders
Thread.sleep - это длительная задача. Когда вы запускаете такую задачу в EDT, она блокирует выполнение всех запросов на перерисовку. Все ожидающие обработки запросы на перерисовку, которые были отправлены на этапе ожидания, ставятся в очередь для будущей обработки.
В результате, когда EDT выходит из фазы sleep, он объединяет все такие запросы на перерисовку (если объединение включено, что является свойством по умолчанию) в одну перерисовку, которая выполняется. Если объединение не включено, то все запросы в очереди выполняются последовательно без каких-либо временных промежутков между ними. В результате кажется, что пользовательский интерфейс не обновлялся.
Чтобы исправить ситуацию, используйте SwingTimer, который срабатывает периодически через определенные промежутки времени, или SwingWorker.