0

我正在为 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_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();
                }
                }   
            }
        });

但它不起作用,请帮我这样做。提前致谢。

4

3 回答 3

6

更好的使用org.eclipse.swt.widgets.Display.timerExec(int, Runnable)方法来及时更新 UI。

于 2013-04-16T14:58:21.090 回答
3

您不是从另一个线程更新 UI - 您是从自身更新 UI 线程。

sleep在 UI 线程上 ing 会阻止 UI 线程执行诸如绘画之类的操作,因此看起来您的程序已挂起。

与其安排 UI 线程运行Runnable更新小部件并休眠一秒钟的线程,不如让线程每秒休眠,然后调度Runnable更新小部件然后快速退出的线程。

例如:

while(true)
{
    getDisplay().asyncExec(new Runnable() {
        lblNewLabel_1.setText(Calendar.getInstance().getTime().toString());
    });

    Thread.sleep(1000);
}
于 2013-04-16T15:03:49.407 回答
0

我完全做到了..使用以下代码

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();
于 2013-04-17T08:00:56.877 回答