英文:
XDEVTextField's value isn't updated to real time
问题
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() {
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();
}
}
}
问题是txtTime
的值根本没有持续更新,该值仅在线程启动时设置一次。
我正在使用Rapidclipse 3.1.1。我曾经使用Java Swing的JLabel在Netbeans上制作过一个类似的数字时钟。我不知道问题可能是什么。我怀疑并检查了txtTime
元素的所有属性,但似乎没有任何原因。任何建议或解决方案将不胜感激。
英文:
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.<br>
Below is my code: <br>
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<br><br><br> while the System.out.println(dateandtime.format(date));
can still print out the real time to the console, like this:<br>
<br><br>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.
答案1
得分: 1
你只能使用access()方法来访问用户界面(UI),该方法会锁定会话以防止冲突。
@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();
}
}
英文:
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();
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论