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 будет хорошо работать для этого.