簡體   English   中英

在swt中使用java.util.Timer

[英]Use java.util.Timer in swt

這是我的代碼:

new Button(shell,SWT.PUSH).addListener(SWT.Selection,new Listener() {
        @Override
        public void handleEvent(Event event) {
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    label.setText(String.valueOf(System.currentTimeMillis()-start[0]));
                    start[0] = System.currentTimeMillis();
                }
            },100);
        }
    });

比我收到一個錯誤:

Exception in thread "Timer-0" org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:4397)
at org.eclipse.swt.SWT.error(SWT.java:4312)
at org.eclipse.swt.SWT.error(SWT.java:4283)
at org.eclipse.swt.widgets.Widget.error(Widget.java:472)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:363)
at org.eclipse.swt.widgets.Label.setText(Label.java:386)
at Main$2$1.run(Main.java:51)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

如何改進代碼? (display.timerExec()除外)

嘗試使用asyncExec(未測試)

    new Button(shell,SWT.PUSH).addListener(SWT.Selection,new Listener() {
        @Override
            public void handleEvent(Event event) {
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        Display.getDefault().asyncExec(new Runnable() {
                            public void run() {
                                label.setText(String.valueOf(System.currentTimeMillis()-start[0]));
                                start[0] = System.currentTimeMillis();
                            }
                        }
                    }
                },100);
            }
        });

希望能幫助到你

PS:看看本書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM