2014-12-06 80 views
0

我下面this Swing指南,我碰到這個代碼片段跑:我需要幫助理解這個java代碼

EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      SimpleExample ex = new SimpleExample(); 
      ex.setVisible(true); 
     } 
    }); 

什麼的EventQueue.invokeLater PARAMS裏面發生了什麼?

+0

閱讀有關匿名課程。 https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html – 2014-12-06 13:48:11

+0

它是Runnable類的匿名實現。 – 2014-12-06 13:49:30

+1

http://stackoverflow.com/questions/22534356/java-awt-eventqueue-invokelater-explained可能是有用的 – Kennet 2014-12-06 13:51:58

回答

2

invokeLater需要參數類型Runnable,即實現Runnable接口的類的實例。在此示例中,此方法接收實現Runnable的匿名類的實例。

Runnable只有一個方法 - run - 所以所有的匿名類實例必須執行的是run方法。

在Java 8,有一個更短的語法,使用lambda表達式:

EventQueue.invokeLater(
    () -> { 
     SimpleExample ex = new SimpleExample(); 
     ex.setVisible(true); 
    } 
); 
+0

哇,這很酷。我會在10分鐘內接受我的請求,謝謝。 – 2014-12-06 13:51:51

0

invokeLater()的參數必須要實現Runnable,在這種情況下是一個anonymous inner class - 一個沒有名稱的類並且(在這種情況下)只創建一個對象,明確地指定Runnable接口的新實現。這主要是用於允許遺留代碼中引用方法的Java hack。在新代碼中,您可以在大多數情況下使用lambdasmethod references

EventQueue.invokeLater(() -> { 
     SimpleExample ex = new SimpleExample(); 
     ex.setVisible(true); 
}); 

您提出將剛剛從EventQueue運行run()的代碼時,它的時間這個特殊的代碼。