Swing и метка setText не работают - PullRequest
1 голос
/ 22 декабря 2011

Мне нужна небольшая помощь с качелями. Это мой код:

public class UIdostawca extends javax.swing.JFrame {


    /** Creates new form UIdostawca */
    public UIdostawca() {
        initComponents();
        setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);
    }

    /* This is my function */
    public void loadStuff() {
        jLabel2.setText("Works or not?"); 
    }


    /*
      A lot of code generated by NETBEANS
     */


    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel2;

}

Я использую это так:

UIdostawca a = new UIdostawca();

a.loadStuff();

и jLabel2 не изменился; (

Однако при выполнении

jLabel2.setText("Works or not?"); 

в функции типа formWindowOpened

все работает

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011

Это проблема многопоточности. Когда вызывается formWindowOpened, он вызывается потоком диспетчеризации событий Swing (EDT), который является тем же потоком, который рисует интерфейс, поэтому имеет правильное значение текста для рисования.

Если вы позвоните setText из другого потока, EDT, вероятно, не получит правильное значение для текста. Везде, где вы вызываете setText в каком-либо другом потоке, вы должны обернуть его в SwingUtilities.invokeLater(), что изменит текстовое значение на EDT.

0 голосов
/ 22 декабря 2011

В первом случае вы инициализировали jLabel2?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...