2017-06-20 75 views
0

所有與GUI相關的代碼只能從EDT執行。在Android開發中,類似這樣的東西似乎被強制實施,所以如果你這樣做,你會得到一個例外。在主線程中進行網絡調用。但是,對於開發Java桌面應用程序,沒有這樣的事情。很容易忘記EDT並且仍然在另一個線程中執行GUI代碼。這可能會導致奇怪的毛刺/錯誤,因爲Swing is not thread-safe。有沒有辦法在默認情況下強制執行每個GUI代碼的EDT的用法,類似於Android更嚴格嗎?我不想手動檢查所有內容,如果違反了EDT使用建議,則會發生異常。我正在使用IntelliJ IDEA強制EDT線程用於Swing庫

在Java代碼中,像可以對每個自動插入下列條款Swing庫方法:

if(!SwingUtilities.isEventDispatchThread()) 
{ 
    throw new IllegalStateException("EDT property violated"); 
} 

任何方式來獲得嗎?

回答

2

有一個ThreadCheckingRepaintManager,在這裏看到: ThreadCheckingRepaintManager

您可以使用它像這樣:

public static void main(String args[]) { 
     RepaintManager.setCurrentManager(new ThreadCheckingRepaintManager(true)); 
     //Create your UI here 
    } 

現在你只要有EDT問題在控制檯中的信息。