0

为什么当我使用 Timer.util 时,JLabel 不会与我插入到 JTextPane 中的字符串对齐?但是当我使用计时器时,它会对齐。我的数据库需要 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();
}
}
4

1 回答 1

3

不要在 Swing 事件调度线程(EDT)上使用 java.util.Timer,因为它对于 Swing 的使用不是线程安全的。使用 javax.swing.Timer 或者如果必须使用 java.util.Timer,请在后台线程上使用它,并确保仅在 EDT 上进行 Swing 调用。SwingWorker 可以很好地解决这个问题。

于 2013-05-06T02:46:16.150 回答