Предположим, что у меня есть функция refresh(), которая вызывает две другие функции, одна из которых - это функция longData(), которая должна быть запущена с EDT и other - это быстрая функция repaint(), которая запускается в EDT и которая копирует компоненты GUI.Java-потоки: пусть функция EDT ожидает долговременной работы от EDT
refresh()
{
clearData(); //off the EDT function
repaint(); //in the EDT function
}
Что такое надлежащий способ обработки перерисовки, когда требуется выполнить более длительную операцию, например clearData(). Позволяет ли поток clearData запускать repaint() после того, как он будет закончен надлежащим образом? Как это может быть сделано?
SwingUtilities.invokeLater позволит перерисовать() запустить до или после clearData, в то время как я хочу, чтобы repaint() всегда вызывался после, однако я не хочу, чтобы он блокировал ожидание clearData(), иначе GUI замерзнет. Для этого недостаточно invokeLater и invokeAndWait. – dendini
@dendini: Как я уже сказал, запустите repaint() после завершения clearData(). " Я только упомянул 'invokeLater()' как способ запустить 'repaint()' на EDT. Ответ Анаса - это именно то, что я предлагал, в форме кода (хотя его внешний «Runnable» кажется посторонним, поскольку он не запускается в другом потоке, как написано в настоящее время). –