В actionPerformed repaint не работает с новой темой
После того, как я нажимаю кнопку, actionPerformed
называется. Начало нового Thread
как это:
public void actionPerformed(ActionEvent evt) {
try {
Runnable r = new Runnable() {
public void run() {
try {
mylabel.setText("new text");
mylabel.revalidate();
mylabel.repaint();
} catch (Exception x) {
x.printStackTrace();
}
}
};
Thread thread = new Thread(r);
thread.start();
MyFunction();
// ...
После этого на myLabel
строка, new text
, не появляется, только после actionPerformed
запустить.
1 ответ
Решение
Вы должны запустить код, связанный с GUI, в Thread Dispatch Thread (EDT). Не создавайте другую тему.
public void actionPerformed(ActionEvent evt) {
try {
SwingUtilities.invokeLater(
new Runnable() {
...
Если actionPerformed
это обратный вызов слушателя, он уже работает на EDT. Создать другойRunnable
если обратный вызов занимает много времени, или он "замедлит" графический интерфейс.
Если MyFunction()
Метод не связан с перерисовкой графического интерфейса или чем-то подобным, запускайте его в другом потоке, особенно если он требует значительных ресурсов.