Java 每秒从另一个线程更新swt ui
我正在为MAC OS开发一个SWT java项目,我需要在SWT UI上添加一个标签,在这里我必须显示当前时间,每秒钟更新一次。我试过了Java 每秒从另一个线程更新swt ui,java,swt,ui-thread,Java,Swt,Ui Thread,我正在为MAC OS开发一个SWT java项目,我需要在SWT UI上添加一个标签,在这里我必须显示当前时间,每秒钟更新一次。我试过了 final Label lblNewLabel_1 = new Label(composite, SWT.CENTER); FormData fd_lblNewLabel_1 = new FormData(); fd_lblNewLabel_1.left = new FormAttachment(btnNewButton_call, 10); fd_lblNe
final Label lblNewLabel_1 = new Label(composite, SWT.CENTER);
FormData fd_lblNewLabel_1 = new FormData();
fd_lblNewLabel_1.left = new FormAttachment(btnNewButton_call, 10);
fd_lblNewLabel_1.bottom = new FormAttachment(100, -10);
fd_lblNewLabel_1.right = new FormAttachment(btnTransfer, -10);
fd_lblNewLabel_1.height = 20;
lblNewLabel_1.setLayoutData(fd_lblNewLabel_1);
getDisplay().syncExec(new Runnable() {
@Override
public void run() {
while(true){
lblNewLabel_1.setText(Calendar.getInstance().getTime().toString());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
但它不起作用,请帮我做。
提前感谢。最好使用
org.eclipse.swt.widgets.Display.timerExec(int,Runnable)
方法及时更新UI。您不是从另一个线程更新UI,而是从自身更新UI线程
sleep
UI线程上的挂起将阻止UI线程执行绘画之类的操作,因此程序似乎已挂起
与计划UI线程运行更新小部件并休眠一秒钟的Runnable
不同,您需要一个每秒钟休眠一次的线程,然后计划更新小部件然后快速退出的Runnable
例如:
while(true)
{
getDisplay().asyncExec(new Runnable() {
lblNewLabel_1.setText(Calendar.getInstance().getTime().toString());
});
Thread.sleep(1000);
}
我完全做到了..使用下面的代码
Thread timeThread = new Thread() {
public void run() {
while (true) {
display.syncExec(new Runnable() {
@Override
public void run() {
lblNewLabel_1.setText(Calendar.getInstance().getTime().toString());
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
timeThread.setDaemon(true);
timeThread.start();
看起来你使用了@EdwardThomson的方法。你应该投赞成票,然后接受他的回答……我已经接受了他的回答,但不能投赞成票,因为至少需要15个声誉。现在你有15个声誉;)@Mukesh Kumar:Sambi Reddy的答案更合适。我不这么认为,因为当我使用只运行一次而不是周期性的方法时。我调用了它,即
display.timerExec(1000,new Runnable(){@Override public void run(){lblNewLabel_1.setText(Calendar.getInstance().getTime().toString());})代码>