2013-05-14 103 views
0

我有這個功能應該觸發一個通知窗口Eclipse RCP的 - Java的

public void PushNotif(String notifTitile,String notifText,int notifType) 
{ 
     Random r = new Random(); 
     int max = NotificationType.values().length; 
     final String Title = notifTitile==null?"no Title":notifTitile; 
     final String Text = notifText==null?"no Text":notifText; 
     final int Type = notifType==0?r.nextInt(max):notifType; 

     new Thread(new Runnable() 
     { 
      public void run() 
      { 
       while (true) 
       { 
        try 
        { 
         Thread.sleep(1000); 
        } 
        catch (Exception e) 
        { 
         e.printStackTrace(); 
        } 
        Display.getDefault().syncExec(new Runnable() 
        { 
        public void run() 
        { 
          //IT'S NEVER ENTER HERE!!! 
          NotifierDialog.notify(Title, Text, NotificationType.values()[Type]); 
          while (!NotifierDialog._shell.isDisposed()) 
          { 
           if (!Display.getDefault().readAndDispatch()) Display.getDefault().sleep(); 
          } 
          Display.getDefault().dispose(); 
        } 
        }); 
       } 
      } 
     }).start(); 
} 

我的問題顯示線程是,它從未進入run()功能。

它停留在Display.getDefault().syncExec(new Runnable()...,這一切。 我知道Display.syncExec應該等到它可以運行,但我不知道如何使它準備好...

幫助?

+1

這是SWT嗎? Eclipse RCP? – 2013-05-14 10:56:59

+0

@JoachimSauer我使用Eclipse與SWT。我怎麼知道我的SWT版本是什麼?我知道這個'org.eclipse.swt.widgets.Display' – Ofear 2013-05-14 11:07:54

+0

你指的是哪個run()? – m0skit0 2013-05-14 11:17:27

回答

1

它看起來對我說,你要添加的Runnable到錯誤顯示線程。使用current線程,而不是default。無處不在。

getCurrent()

返回顯示其中當前運行的線程是用於 用戶界面線程或null如果當前運行的線程是 不對任何顯示的用戶界面的線程。

Display.getCurrent().syncExec(new Runnable() { 
}); 
+2

getCurrent()修復了這個問題!謝謝! – Ofear 2013-05-14 11:30:27