Я делаю JLabel для отображения таймера, поэтому он обновляется каждую секунду, и я обновляю его с помощью потока. Я использую SwingWorker для обновления JLabel, но это не работает. Вот мой код ...setText jLabel не работает даже с SwingWorker
long pos=-1;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
pos=...value of timer....
jLabel1.setText("in function");
jLabel3.setText("in function");
timer=new Thread(new adsa());
timer.start();
}
catch(Exception e)
{
System.out.println("EXCEPTION CAUGHT");
}
}
/**
*
*/
public void run()
{
try
{
System.out.println(pos);
while(pos!=0 && clip.isRunning())
{
label1.setText(String.valueOf(pos));
System.out.println(pos);
pos--;
timer.sleep(1000);
SwingWorker worker = new SwingWorker() {
@Override
public Object doInBackground(){
try
{
jLabel3.setText(String.valueOf(pos));
jLabel3.setText("ghfdxhc");
label1.setText("hvgjh");
System.out.println("zxc");
return null;
}
catch(Exception e)
{
return null;
}
}
};
worker.execute();
}
}
catch(Exception e)
{
System.out.println("Error in run");
}
}
Все Println заявления работают, даже свою внутреннюю SwingWorker но JLabel не обновляется, «в функции» отображается на обеих этикетках, и он не меняется. Просьба предложить альтернативный метод, если это возможно ...
Try '' repaint'ing в JLabel' после установки текста. –
Yikes .. ты усложнил ситуацию. Попробуйте [this] (http://stackoverflow.com/questions/6330945/how-to-display-changing-text-in-java-swing-ie-display-time-with-changing-secon/6331033#6331033). – mre
, вы должны вызывать 'setText()' in 'done()', а не 'doInBackground()' im, не уверен, что вы получите обновление, потому что оно работает в другом потоке .. если вы хотите обеспечить 'SwingUtilities.invokeLater (new Runnable() {public void run() {label.setText ("123")}}); ' – nachokk