2013-10-04 24 views
3

我試圖彈出一個對話框(即FileDialog的)在一個Eclipse插件,實際上我通過相關的UI啓動項目(http://lowcoupling.com/post/51877317162/the-acceleo-ui-launcher-project的Eclipse:獲得零顯示

我運行的Acceleo改造前試圖做到這一點在相關doGenerate方法...

public void doGenerate(IProgressMonitor monitor) throws IOException { 

    Display display = Display.getCurrent(); 
    System.out.println(display); 
    //.... 

,但我得到了顯示爲空 我應該怎麼做呢?

回答

5

IWorkbench#getDisplay()狀態的文檔:

代碼應該總是問工作臺上的顯示器,而不是依靠Display.getDefault()

所以使用:

PlatformUI.getWorkbench().getDisplay() 

代替。

+2

請注意,這不能用於不能使用「PlatformUI」的「純」e4應用程序。對於'syncExec'和'asyncExec',可以使用可以注入的org.eclipse.e4.ui.di.UISynchronize'。 –

+0

@ greg-449很高興知道。還沒有使用e4。 – Baz

1

我不知道,如果你看了這還,但該類Display的文檔中,它說,Display.getCurrent()回報

null如果當前正在運行的線程不是用戶界面線程任何顯示。

這可能是問題,但沒有更多的信息,我不知道。

+0

yes這是問題,但我仍然看不到在哪裏顯示對話框 – lowcoupling

0

您可以嘗試獲取默認顯示Display.getDefault()或工作臺顯示PlatformUI.getWorkbench().getDisplay()

如果您沒有在UI線程中運行,請嘗試以下操作:

Display.getDefault().syncExec(new Runnable() { 
    public void run() { 
     // ... do work that updates the screen ... 
    } 
}); 
+0

您知道,您建議的第二種方法是不建議使用第一種方法? ;) – Baz

1

我面臨同樣的問題。我用getShell().getDisplay()而不是Display.getCurrent(),它對我很有幫助。