gpt4 book ai didi

java - Timer util 不会为 JLabel 添加新行

转载 作者:行者123 更新时间:2023-12-01 23:50:20 25 4
gpt4 key购买 nike

为什么当我使用 Timer.util 时,JLabel 不会与我插入 JTextPane 中的字符串对齐?但是当我使用计时器时它会对齐。我的数据库需要 Timer.util,这样它就不会滞后。

这是我使用计时器 Swing 时的图像

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();
}
}

最佳答案

不要在 Swing 事件调度线程(EDT)上使用 java.util.Timer,因为它与 Swing 一起使用时不是线程安全的。使用 javax.swing.Timer,或者如果必须使用 java.util.Timer,请在后台线程上使用它,并确保仅在 EDT 上进行 Swing 调用。 SwingWorker 可以很好地完成此任务。

关于java - Timer util 不会为 JLabel 添加新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com