Установить текст на Jlabel на главной форме из темы

У меня есть Java-приложение, в котором я вызываю потоки для выполнения некоторых вещей:

public class ThreadTest implements Runnable {
private final int functionNumber;
public static mainForm main = new mainForm();
private final int time2start;
public static YourClass obj  = new YourClass();
public ThreadTest(int functionNumber, int time2start, YourClass obj){
this.functionNumber = functionNumber;
this.time2start = time2start;

}
 @Override
public void run(){

try{Thread.sleep(time2start);}catch(Exception ex){}//Time Delay before executing methods
switch(functionNumber){
    case 1:
        obj.runFirst();
        break;
    case 2:
        obj.runSecond();
        main.appendText("Something");
        break;
    case 3:

{
    try {
        obj.runThird();
    } catch (IOException ex) {
        Logger.getLogger(ThreadTest.class.getName()).log(Level.SEVERE, null, ex);
    }
}
        break;

И это метод в моей основной форме с графическим интерфейсом Swing, на котором я хочу добавить текст из потока:

 void appendText(String text){
  generalStatus.setText(text);
 }

Как это достигается? Я думаю, мне нужно использовать перекрасить или что-то?

1 ответ

Обновление компонента GUI (JLabel) из другого потока, кроме потока Swing, не может быть выполнено напрямую. Но вы можете использовать синхронизированный поток с потоком Swing, используя SwingUtilities.invokeLater. Компоненты графического интерфейса могут быть обновлены внутри потока, как это,

void appendText(String text) {
    final String Text=text;
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            generalStatus.setText(Text);
        }
    });
}

Всякий раз, когда вы хотите обновить компоненты GUI в любом другом потоке, кроме потока Swing, вы должны использовать этот механизм.

Другие вопросы по тегам