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

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

為什么在main方法中使用SwingUtilities.invokeLater?

為什么在main方法中使用SwingUtilities.invokeLater?

呼如林 2019-08-28 10:31:24
為什么在main方法中使用SwingUtilities.invokeLater?經過多年的Java編程,我總是習慣于創建main()這樣的方法:public static void main(String[] args) {     runProgram();}但是最近我從Web上學習了一些代碼并且有時看到這個代碼而不是main()上面的常規用法:public static void main(String[] args) {     SwingUtilities.invokeLater(new Runnable()      {         public void run()          {             runProgram();         }     });}我只是想知道:為什么要使用這個而不是通常的main()方式?當我試一試時,我看不出有任何區別。這兩種方式有什么區別?感謝您閱讀我和您的答案。
查看完整描述

3 回答

?
梵蒂岡之花

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

文檔解釋了原因。來自初始線程

為什么初始線程不是簡單地創建GUI本身?因為幾乎所有創建Swing組件或與Swing組件交互的代碼都必須在事件派發線程上運行。

并從事件派遣線程

一些Swing組件方法在API規范中標記為“線程安全”; 這些可以從任何線程安全地調用。必須從事件派發線程調用所有其他Swing組件方法。忽略此規則的程序可能在大多數情況下正常運行,但會遇到難以復制的不可預測的錯誤。


查看完整回答
反對 回復 2019-08-28
?
MM們

TA貢獻1886條經驗 獲得超2個贊

因為VM啟動的線程“main”不是事件派發線程。


查看完整回答
反對 回復 2019-08-28
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

來自API的一些Swing組件不是線程安全的,這意味著它們可能會導致一些問題,比如死鎖,所以最好通過使用Swing提供的Event調度程序線程創建和更新這樣的swing組件,但不能從主線程或其他任何線程創建和更新從main創建的線程。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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