2011-07-20 29 views
1

使用的Albireo,可以很容易地看到如何顯示從SWT一個Swing對話框:從AWT/Swing的顯示SWT模態對話框

private AwtEnvironment awtEnv = AwtEnvironment.getInstance(Display.getCurrent); 

... 
// call from SWT thread 
void showSwingMessageDialog(String msg) { 
    awtEnv.invokeAndBlockSwt(new Runnable() { 
     public void run() { 
      Frame parentFrame = awtEnv.createDialogParentFrame(); 
      JOptionPane.showMessageDialog(parentFrame, msg); 
     } 
    } 
} 

我想表明從AWT線程的SWT對話框,即

// call from AWT thread 
void showSWTMessageDialog(String msg) { 
    ??? 
} 
+1

你可以請發佈更多的代碼,而不僅僅是一個線..? – Sorceror

+0

當然,在這裏。 –

+0

@AlexeyRomanov嘿,你有沒有想過這個?遇到同樣的問題,試圖使一個新的shell程序塊成爲一個JFrame。 – milez

回答

2

我不確定,如果我很好地理解了這個問題,但是當您使用Albireo/SWT_AWT橋編寫程序時,通常使用SWT,並且當您需要時,可以使用Swing進行一些工作(如this example on eclipse wiki所示)。 。因此,如果您在某個全局屬性中擁有父級(最可能是Shell實例)你可以創建SWT對話框無論何時何地,你需要..

編輯

對於阻塞AWT線程,你可以調用SwingUtilitiesinvokeAndWait()方法和Runnable實例內顯示SWT對話框窗口..

+0

問題是,它會阻止AWT事件線程嗎? –

+0

我不確定,你可能會嘗試。無論如何,你爲什麼要阻止線程? 也許這[wiki文章](http://wiki.eclipse.org/Albireo_Documentation#Multiple_Event_Threads)的這一小部分將幫助你,或更深(更長)的文章[關於SWT和AWT](http:// www。 eclipse.org/articles/article.php?file=Article-Swing-SWT-Integration/index.html)將有助於回答這個問題。 – Sorceror

+0

「無論如何,你爲什麼要阻止該線程?」 Eclipse Corner文章的「Modal對話框」部分解釋了爲什麼需要這樣做(但不是如何去做)。 –