Timer util не добавит новую строку для JLabel

Почему, когда я использую Timer.util, JLabel не присоединится к моей строке, которую я вставил в JTextPane? Но когда я использую Таймер, это Allign. Мне нужен Timer.util для моей базы данных, чтобы он не отставал.

Вот изображение, когда я использую Timer swing

введите описание изображения здесь

Timer t2 = new Timer(250,new ActionListener(){

        public void actionPerformed(ActionEvent arg0) {

            fetchMessageData2();
        }
    });
    t2.start();


public static void fetchMessage(JTextPane jtep,StyledDocument sd,int count  )
{

    try{

    String query = "SELECT members.username, message FROM chat JOIN members ON    chat.user_id = members.id WHERE message_id > "+count+"";
    rs = st.executeQuery(query);
    while(rs.next())
    {

        try {
            final JLabel jp = new JLabel(rs.getString("username")+ "\n");
            jp.setAlignmentY(0.75f);
            jp.setFont(new Font("arial",Font.BOLD,16));
            jtep.insertComponent(jp);
            sd.insertString(sd.getLength(), ": "+rs.getString("message")+ "\n", MainPanel.sas);
        } catch (BadLocationException e1) {

            e1.printStackTrace();
        }


        MainPanel.count++;}

    }catch(Exception ex){System.out.print(ex);}

}

Вот результат изображения с использованием Timer.util

введите описание изображения здесь

Timer t  = new Timer();
    t.schedule(new runnableMethods(), 0,500);

import java.util.TimerTask;


public class runnableMethods extends TimerTask{

@Override
public void run() {

    SubPanel1.checkOfflineOnline();
}
}

1 ответ

Не используйте java.util.Timer в потоке рассылки событий Swing, EDT, так как он не безопасен для использования с Swing. Либо используйте javax.swing.Timer, либо, если вам нужно использовать java.util.Timer, используйте его в фоновом потоке и убедитесь, что вы делаете вызовы Swing только в EDT. SwingWorker будет хорошо работать для этого.

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