簡體   English   中英

多個Swing事件派發線程

[英]Multiple Swing event-dispatch threads

我想在Swing中創建一個新的事件派發線程,但我無法在線找到任何關於如何執行此操作的引用。 我通過創建一個新線程並調用Application.run(...)在.NET中完成了這個。 有沒有人這樣做過? 在Swing中有可能嗎?

僅供參考我之所以這樣做,是因為我正在編寫一個Eclipse插件,我想彈出一些不是IDE模態的對話框,但它們是我的UI邏輯的模態(阻塞)。 我可以使用非模態對話框和回調來實現這一點,但這需要使我的代碼多線程的開銷。 如果前者不可能,我會再回到那里。

是的,這是可能的。 我已經在Swing中完成了這樣的多個EDT調度線程邏輯。 然而,最終結果是它無法可靠地工作。

(a)所有JVM都不能很好地與多個EDT線程一起工作(本機代碼中的圖形渲染邏輯中的同步問題等等,IBM JVM因多個EDT線程而失敗,Sun JVM和Apple JVM確實有效)

(b)Swing渲染邏輯幾乎沒有錯誤導致隨機渲染錯誤發生(例如, http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6727829 )。

無論如何,這樣做需要基本上建立兩個AppContexts,每個AppContexts都有自己的EDT線程。

我對你的問題感到有些困惑,因為你提到了Swing,但后來說你正在編寫一個Eclipse插件。 由於這個問題被標記為Swing,我將給出一個Swing答案(但是發布為CW)。

有一個事件派發線程。 總有一個事件派發線程,除非根本沒有。 你不能創建另一個。

但是,您可以更改對話框的ModalityType ,或更改窗口的ModalExclusionType 在這種情況下,如果您自己編寫此內容,則應將頂級窗口的ModalExclusionTypeAPPLICATION_EXCLUDE

但同樣,我不知道這對你有什么幫助,因為Eclipse使用SWT而不是Swing。

我要把我的最后一個答案丟掉,重新開始。

在SWT中,您可以通過在創建期間傳遞SWT.PRIMARY_MODAL樣式標志來創建僅對父項具有模態的Shell (窗口)或自定義Dialog

請注意, Dialog是一個抽象類,因此您必須創建自己的類。 使用Shell可能更容易。

編輯:

為何選擇SWT? 因為這是Eclipse使用的。 有關更多詳細信息,請參閱: Eclipse Platform Plug-in Developer Guide (壓縮PDF)。 Eclipse的幫助系統(幫助>幫助目錄>插件開發環境指南)中提供了最新版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM