我最近開始學習和探索Java中GUI編程的基礎知識。Java事件派發線程說明
已經編程了,而我也只是做後臺工作,或工作,因此我已經得到了用戶界面的最接近的是命令控制檯(尷尬的,我知道)。
我正在使用Swing,並且據我所知可以通過擴展來收集,我也使用AWT。
我的問題是在此基礎上一段代碼:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new frame.setVisible(true);
}
});
我一直在研究這一段時間,因爲我想完全理解這種奇怪的代碼和所遇到的術語「事件調度線程'多次。如果我錯了,請糾正我,但據我瞭解;它與使用多線程以及Java Swing如何解釋這些線程有關。我也收集以上代碼用於在創建窗口前確保所有線程都是'安全'的,因此invokeLater?
我已閱讀:
「你只能調用框架上運營從事件分派線程方法」
,只有在某些情況下,你可以調用的方法是在主方法的框架上進行操作。
能有人請澄清我正是事件派發線程是什麼?
它與多線程執行以及這些線程如何不安全地從主方法調用?另外爲什麼我們需要這個invokeLater?
難道我們不能只是創建窗口,任何其他對象?
我已經打了一下路障在我的研究,我沒有把握這些關係和想法。
一個側面說明的是,我想立足於深入瞭解我的知識,因爲我相信這將導致最佳的整體結果,結果的最佳方案。如果我深入瞭解某些工作是如何進行的,那麼您可以有效地使用提示和調整,而不是僅僅將它們重新編碼到代碼中,所以請不要害怕給我一些額外的深入解釋並拓寬我的知識。
謝謝。
我道歉這麼晚纔回復,我一直保持着工作。你的文章其實很簡潔地回答了我的很多問題,所以我想爲此感謝你。 好吧,如果我理解正確,那麼爲了在GUI上進行操作,我應該對可運行對象使用invokeLater()方法,通過這樣做我可以確保始終使用EDT? 我還讀了關於現在正式支持的SwingWorker類。這個類會被認爲優於invokeLater方法還是我誤解,他們解決了兩個不同的問題? – linuscash
有很多情況下,您可以確保已經在EDT上執行了例如事件處理程序(ActionListeners,ClickListeners),因此不需要從那裏使用invokeLater。我認爲一個SwingWorker只是一個具有與EDT交互的特殊機制的線程(可能通過invokeLater)。所以我肯定會在適當的時候使用它。 – luke
好的,這很有道理,非常感謝。你已經爲我清除了很多差異。 – linuscash