Работа с потоком в swing java

Суть проблемы такова: есть Jframe frame который содержит в себе несколько компанентов: JLabel label, JTextField speed, и кнопка JButton pauseOrStart. Идея такова: в фрэйм приходит лист строк. Каждую строку листа надо выводить по очереди на label с задержкой заданной в speed. При этом, когда нажата кнопка паузы вывод должен останавливаться на текущем слове, когда вновь нажата кнопка паузы, вывод должен продолжаться с текущего слова. При этом, если печать остановлена и пользователь ввел новую скорость вывода в speed, необходимо продолжить вывод с новой скоростью. Понимаю, что скорее всего надо создавать поток который будет печатать это все, но не хватает знаний это реализовать. Буду рад любым советам и особенно рад примерам с кодом!


Ответы (1 шт):

Автор решения: Arty Mart

В общем как я и думал, все получилось сделать через поток. EDT насколько я понял, помещает все операции в очередь, которую выполняет с каждой итерацией бесконечного цикла. Поэтому долгие действия нежелательно помещать в EDT(UI будет тормозить и возможно некорректное обновление UI). Для того чтобы этого избежать достаточно просто поместить задачу в новый поток. Для этого существует целый ряд инструментов. Например SwingWorker, который позволяет очень гибко работать с потоками и получать из них данные. Если задача не нуждается в таком громоздком инструменте, то можно поместить ее в конструкцию:

new Thread(() -> {
    // do something
}).start

Стоит заметить, что данная конструкция должна вызываться в EDT

→ Ссылка