2013-05-14 179 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