第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

java.awt.EventQueue.invokeLater解釋

java.awt.EventQueue.invokeLater解釋

繁華開(kāi)滿天機(jī) 2019-10-17 15:46:46
我很好奇為什么我們必須使用它java.awt.EventQueue.invokeLater來(lái)控制揮桿部件。為什么我們不能在普通線程中這樣做?幕后到底發(fā)生了什么?從我注意到的情況(如果有),JFrame可以在不出現(xiàn)任何錯(cuò)誤的情況下從主線程將可見(jiàn)性設(shè)置為true或false,并且它確實(shí)起作用。那么我到底通過(guò)使用實(shí)現(xiàn)了java.awt.EventQueue.invokeLater什么呢?我也完全知道我可以使用,SwingUtilities.invokeLater但是正如這里所解釋的,它們似乎是一回事。感謝任何人的解釋。希望這是一個(gè)有效的問(wèn)題。編輯:回答wumpz問(wèn)題我們可以創(chuàng)建一個(gè)jframeJFrame frame = new JFrame("Hello world");frame.setSize(new Dimension(300, 300));frame.setPreferredSize(new Dimension(300, 300));frame.setMaximumSize(new Dimension(300, 300));frame.setMinimumSize(new Dimension(300, 300));frame.setVisible(true);frame.pack();frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);在創(chuàng)建的同一線程上,執(zhí)行以下操作。for (int i = 0; i < 34; i++){    System.out.println("Main thread setting to "+(!frame.isVisible()));    frame.setVisible(!frame.isVisible());}而且沒(méi)有怨言。
查看完整描述

2 回答

?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊

完整的Swing處理是在稱(chēng)為EDT(事件調(diào)度線程)的線程中完成的。因此,如果您要在此線程中進(jìn)行一些長(zhǎng)時(shí)間的計(jì)算,則會(huì)阻塞GUI。


此處的方法是在另一個(gè)線程中處理您的計(jì)算,因此您的GUI保持響應(yīng)。最后,您需要更新您的GUI,這必須在EDT中完成?,F(xiàn)在EventQueue.invokeLater開(kāi)始發(fā)揮作用。它Runnable在Swings事件列表的末尾發(fā)布一個(gè)事件(您的),并在處理完所有先前的GUI事件之后進(jìn)行處理。


也EventQueue.invokeAndWait可以在這里使用。所不同的是,您的計(jì)算線程將一直阻塞,直到您的GUI更新為止。因此很明顯,不能在EDT中使用它。


注意不要從其他線程更新Swing GUI。在大多數(shù)情況下,這會(huì)產(chǎn)生一些奇怪的更新/刷新問(wèn)題。


仍然有Java代碼可以從主線程簡(jiǎn)單地啟動(dòng)JFrame。這可能會(huì)導(dǎo)致問(wèn)題,但不能阻止它搖擺?,F(xiàn)在,大多數(shù)現(xiàn)代IDE都會(huì)創(chuàng)建類(lèi)似這樣的內(nèi)容來(lái)啟動(dòng)GUI:


public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {

            new NewJFrame().setVisible(true);

        }

    });

}


查看完整回答
反對(duì) 回復(fù) 2019-10-17
?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

所有受支持的平臺(tái)都提供單線程圖形庫(kù)。搖擺是跨平臺(tái)的。因此,Swing GUI對(duì)象應(yīng)僅在事件分發(fā)線程上構(gòu)造和操作。


順便說(shuō)SwingUtilities.invokeLater()一句,是EventQueue.invokeLater()自1.3版以來(lái)的封面。


查看完整回答
反對(duì) 回復(fù) 2019-10-17
  • 2 回答
  • 0 關(guān)注
  • 1929 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)