Timer util不会为JLabel添加新行

时间:2013-05-06 02:42:55

标签: java swing event-dispatch-thread timertask javax.swing.timer

为什么当我使用Timer.util时,JLabel不会与我在JTextPane中插入的String对齐?但是当我使用Timer it Allign时。我需要Timer.util用于我的数据库,所以它不会滞后。

这是我使用定时器摆动时的图像

enter image description here

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

的图像结果

enter image description here

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 个答案:

答案 0 :(得分:3)

不要在Swing事件调度线程EDT上使用java.util.Timer,因为它不适合与Swing一起使用。要么使用javax.swing.Timer,要么必须使用java.util.Timer,在后台线程上使用它,并确保只在EDT上进行Swing调用。 SwingWorker可以很好地解决这个问题。