簡體   English   中英

了解Java事件調度線程中引發的代碼范圍

[英]Understanding the scope of code evoked in the Java Event Dispatch Thread

我試圖了解將從事件調度線程(EDT)管理哪些事件。

讓我們假設一些簡單的代碼,簡單的代碼簡單地打開JOptionPane,等待用戶的響應,然后將其關閉。 現在,與此對象相關的哪些事件已放入EDT? 是嗎:a)僅創建對象(JOptionPane)。 b)在對象的生存期內所有與對象相關的事件。 C)其他(請說明)。

謝謝,

艾略特

見下文:

        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run(){
                    JOptionPane.showMessageDialog(myComponent, msg);
                }
            });
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

據我所記得,以下所有“事件”都將在EDT中執行:

  • 最終用戶直接觸發的所有事件(鼠標事件,關鍵事件)以及由這些事件觸發的所有更高級別的事件(動作,焦點...); 實際上,您可以說所有EWT和Swing EventListener總是在EDT中調用
  • 所有繪畫代碼(當需要繪畫區域時,由組件變化或寡婦尺寸或位置變化觸發)
  • 通過SwingUtilities.invokeAndWait()SwingUtilities.invokeLater()調用的任何代碼。

所有JOptionPane對話框都是模式對話框:它們將用戶生成的輸入事件阻止到其他窗口,但是EventQueue繼續處理所有窗口的事件。 在此DialogTest ,動畫在JOptionPane.showMessageDialog()等待輸入時繼續。 有一個相關的討論在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM