91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SwingUtilities提供的方法有哪些

發布時間:2021-12-07 10:18:28 來源:億速云 閱讀:312 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“SwingUtilities提供的方法有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“SwingUtilities提供的方法有哪些”這篇文章吧。

Java Swing GUI多線程之SwingUtilities.invokeLater和invokeAndWait在Java中Swing是線程不安全的,是單線程的設計,這樣的造成結果就是:只能從事件派發線程訪問將要在屏幕上繪制的Swing組件。事件派發線程是調用paint和update等回調方法的線程,它還是事件監聽器接口中定義的事件處理方法,例如,ActionListener中的actionPerformed方法在事件派發線程中調用。

Swing是事件驅動的,所以在回調函數中更新可見的GUI是很自然的事情,比如,有一個按鈕被按下,項目列表需要更新時,則通常在與該按鈕相關聯的事件監聽器的actionPerformed方法中來實現該列表的更新,從事件派發線程以外的線程中更新Swing組件是不正常的。

有時需要從事件派發線程以外的線程中更新Swing組件,例如,在actionPerformed中有很費時的操作,需要很長時間才能返回,按鈕激活后需要很長時間才能看到更新的列表,按鈕會長時間保持按下的狀態只到actionPerformed返回,一般說來耗時的操作不應該在事件處理方法中執行,因為事件處理返回之前,其他事件是不能觸發的,界面類似于卡住的狀況,所以在獨立的線程上執行比較耗時的操作可能更好,這會立即更新用戶界面和釋放事件派發線程去派發其他的事件。

SwingUtilities類提供了兩個方法:invokeLate和invoteAndWait,它們都使事件派發線程上的可運行對象排隊。當可運行對象排在事件派發隊列的隊首時,就調用其run方法。其效果是允許事件派發線程調用另一個線程中的任意一個代碼塊。

startButton.addActionListener(new ActionListener())  {     public void actionPerformed(ActionEvent e)     {      GetInfoThread t = new GetInfoThread(Test.this);      t.start();      startButton.setEnabled(false);     }  }   class GetInfoThread extends Thread  {  Test applet;  public GetInfoThread(Test applet)  {  this.applet = applet;  }   public void run()  {     while (true)     {      try      {       Thread.sleep(500);       applet.getProgressBar().setValue(Math.random() * 100);      }      catch (InterruptedException e)      {       e.printStackTrace();      }     }  }  }

invokeLater和invoikeAndWait的一個重要區別:可以從事件派發線程中調用invokeLater,卻不能從事件派發線程中調用 invokeAndWait,從事件派發線程調用invokeAndWait的問題是:invokeAndWait鎖定調用它的線程,直到可運行對象從事件派發線程中派發出去并且該可運行的對象的run方法激活,如果從事件派發線程調用invoikeAndWait,則會發生死鎖的狀況,因為 invokeAndWait正在等待事件派發,但是,由于是從事件派發線程中調用invokeAndWait,所以直到invokeAndWait返回后事件才能派發。

actionPerformed();返回的時候事件派發線程才能派發線程,而在actionPerformed中使用invokeAndWait則會導致actionPerformed不能返回。所以也就無法派發invokeAndWait中的線程。

由于Swing是線程不安全的,所以,從事件派發線程之外的線程訪問Swing組件是不安全的,SwingUtilities類提供這兩種方法用于執行事件派發線程中的代碼

以上是“SwingUtilities提供的方法有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

慈溪市| 泾阳县| 兴安县| 新河县| 玛纳斯县| 盐池县| 图木舒克市| 天柱县| 罗平县| 平阳县| 海南省| 台北县| 隆回县| 申扎县| 黄大仙区| 南通市| 兰溪市| 普安县| 临洮县| 和静县| 克拉玛依市| 五峰| 昌江| 宣威市| 青州市| 芜湖县| 古交市| 岳普湖县| 泽库县| 都江堰市| 北碚区| 无棣县| 大城县| 当阳市| 临江市| 佛学| 荆州市| 扎兰屯市| 黎平县| 斗六市| 赣榆县|