0

我有这个功能应该触发一个通知窗口

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应该等到它可以运行,但我不知道如何让它准备好......

帮助?

4

1 回答 1

1

在我看来,您将其添加Runnable到错误的显示线程中。使用current线程,而不是default. 到处更换。

获取当前()

返回当前运行的线程是用户界面线程的显示,如果当前运行的线程不是任何显示的用户界面线程,则返回 null。

Display.getCurrent().syncExec(new Runnable() {
});
于 2013-05-14T11:22:08.257 回答