亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

揮桿使用.InvokeLater

揮桿使用.InvokeLater

楊__羊羊 2019-07-03 17:17:37
揮桿使用.InvokeLater我的問題與SwingUtilities.invokeLater..我什么時候該用它?是否每次需要更新GUI組件時都必須使用?它到底是做什么的?有沒有其他選擇,因為它聽起來不直觀,并添加了看似不必要的代碼?
查看完整描述

3 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

是否每次需要更新GUI組件時都必須使用?

不,如果您已經在事件分派線程(EDT)上-在響應用戶發起的事件(如單擊和選擇)時,情況總是如此。()actionPerformed方法等,都是由EDT調用的。)

如果你但是,在EDT上,并希望進行GUI更新(如果您想從某個計時器線程或網絡線程等更新GUI),您必須進度表由EDT執行的更新。這就是這個方法的目的。

Swing基本上是線程不安全的。也就是說,與該API的所有交互都需要在單個線程(EDT)上執行。如果需要從另一個線程(計時器線程、網絡線程、.)進行GUI更新您需要使用您提到的方法(SwingUaryties.InvokeLater,SwingUaryties.InvokeAndWait,.)。


查看完整回答
反對 回復 2019-07-03
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

Swing is single threaded and all changes to the GUI must be done on EDT

基本用法invokeLater()

  1. 主要方法應始終包裝在invokeLater()

  2. 將動作/事件延遲(但異步)到EventQueue,

  3. 如果EDT不存在,則必須使用invokeLater()..你可以用if (SwingUtilities.isEventDispatchThread()) {...

  4. 有存在invokeAndWait(),但直到今天,我(只是我的觀點)還沒有找到使用它的理由。invokeAndWait()而不是invokeLater(),除了對GUI的硬更改(JTree&JTable)之外,但僅用物質L&F(非常適合測試EDT上事件的一致性)

  5. 基本材料:在Swing中并發

  6. 所有來自后臺任務的輸出必須包裝在invokeLater()


查看完整回答
反對 回復 2019-07-03
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

每個Swing應用程序至少有兩個線程:

  1. 執行應用程序的主線程。
  2. EDT(事件分派線程)是一個更新UI的線程(因此UI不會凍結)。

如果要更新UI,則應在EDT中執行代碼。像SwingUaryties.InvokeLater、SwingUaryties.InvokeAndWait、EventQueue.InvokeLater、EventQueue.InvokeAndWait等方法允許您通過EDT執行代碼。


查看完整回答
反對 回復 2019-07-03
  • 3 回答
  • 0 關注
  • 458 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號