I have an XDEVTextField that needs to update real time by every second. I tried the answers proposed in this question, including using Executor and Swing Timer. I also tried this way.
Below is my code:
public class FirstView extends XdevView implements Runnable {
Thread t = null;
String timeString = "";
public FirstView() {
super();
this.initUI();
this.t = new Thread(this);
this.t.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
while (true) {
final Calendar cal = Calendar.getInstance();
final SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
final Date date = cal.getTime();
this.timeString = formatter.format(date);
System.out.println(this.timeString);
this.txtTime.setValue(this.timeString);
Thread.sleep(500); <-- this should be changed to 1000 but I forgot to
}
}
catch (final Exception e) {
e.printStackTrace();
}
}
The problem is the txtTime
's value isn't updated continuously at all, the value was only set once at the point the Thread started
while the System.out.println(dateandtime.format(date));
can still print out the real time to the console, like this:
I'm using Rapidclipse 3.1.1. I made a similar digital clock like this one using Java Swing's JLabel on Netbeans. I have no clue what can be the problem here. I suspected and checked all the Properties of the txtTime
element but nothing seems to be the cause to this. Any suggestion or solution would be appreciated.
you may only access an UI using the access() method, which locks the session to prevent conflicts.
@Override
public void run() {
try {
while (true) {
this.time = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date());
System.out.println(this.time);
UI.getCurrent().access(()->this.button.setCaption(this.time));
this.t.sleep(1000);
}
} catch (final InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}