Параллелизм в приложениях Swing сложен: все, что влияет на GUI, должно выполняться в одном потоке (называемом потоком диспетчеризации событий). Поэтому, когда вы настраиваете отдельный поток для выполнения какой-то длительной фоновой задачи (например, создание карты для области, которую игрок еще не просматривает), вам необходимо тщательно поработать, чтобы синхронизировать все, что может повлиять на GUI.
Как правило, у вас есть два варианта для более простых вариантов использования:
- Если это короткое действие, которое непосредственно влияет на GUI, тогда используйте
Timer
, чтобы вызвать событие в потоке отправки событий. Смотри здесь .
- Если это длинное занятие, тогда используйте
SwingWorker
. Смотри здесь .
Существует множество других способов взаимодействия с другими потоками (например, см. SwingUtilities.invokeLater
и SwingUtilities.invokeAndWait
), но, учитывая, что вы сказали, что только начинаете, я бы предложил придерживаться одного из этих двух вариантов. Они позаботятся о большей части сложности для вас и позволят вам сосредоточиться на игровой логике.