2013-04-16 2 views
0

나는 맥 OS 용 SWT 자바 프로젝트에서 일하고있다. 매 초마다 업데이트해야하는 SWT UI에 레이블을 추가해야한다. 시도했습니다. 즉매 초 다른 스레드에서 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(); 
       } 
       } 
      } 
     }); 

그러나 작동하지 않습니다. 도와주세요. 사전에 감사합니다.

답변

3

다른 스레드에서 UI를 업데이트하지 않습니다. UI 스레드를 자체에서 업데이트하고 있습니다.

sleep UI 스레드에서 실행하면 UI 스레드가 페인팅과 같은 작업을 수행하지 못하게되어 프로그램이 중단 된 것처럼 보입니다. UI 스레드가 잠시 위젯을 업데이트하고 휴면 Runnable을 실행하는 대신에 일정의

, 당신은 매 초마다 다음 일정 위젯 를 업데이트하고 신속 나가는 Runnable을 자고 스레드를 원한다. 예를 들어

:

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

    Thread.sleep(1000); 
} 
6

org.eclipse.swt.widgets.Display.timerExec(int, Runnable)을 사용하면시기 적절하게 UI를 업데이트 할 수 있습니다.

0

나는 당신이 @EdwardThomson의 접근 방식을 예전처럼

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(); 
+0

이 보이는 코드를 다음 exactly..using했다. 당신은 그때 그의 대답을 upvote 받아 받아 들여야합니다 ... – Baz

+0

나는 그 대답을 받아 들였지만, 최소 15 명 이상의 평판이 필요하기 때문에 투표를하지 않았습니다. –

+0

이제 15 평판을 얻었습니다.) – Baz

관련 문제