Необходимо учитывать две вещи.
Во-первых, вы создаете длительный процесс в потоке диспетчеризации событий.Это то, что вы никогда не должны делать.Как указывает Никан, все события GUI в вашем приложении Swing будут вызываться в этой теме.Когда пользователь нажимает кнопку Пуск, ваш actionPerformed
в вашем StartListener
будет вызываться в EDT.Прочитайте здесь для получения дополнительной информации о Swing Threading.
Это приводит ко второму пункту: вы захотите запустить hotelCalifornia
в другом потоке.Вы можете оставить ссылку на эту тему так, чтобы вы могли позвонить thread.interrupt()
, как указывает Божо.У вас также есть возможность работать с вашей собственной реализацией, но вы захотите убедиться, что ваш active
var объявлен как volatile
, чтобы состояние логического значения было немедленно доступно для вашего новогопоток, как только он обновляется.