2014-12-06 4 views
0

를위한 도움이 필요한 나는이 코드 조각 가로 질러 :나는 <a href="http://zetcode.com/tutorials/javaswingtutorial/" rel="nofollow">this</a> 스윙 튜토리얼 다음있어이 자바 코드

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 –

+0

Runnable 클래스의 익명 구현입니다. –

+1

http://stackoverflow.com/questions/22534356/java-awt-eventqueue-invokelater-explained 사용할 수 있습니다. – Kennet

답변

2

invokeLaterRunnable 유형의 인수, 즉 Runnable 인터페이스를 구현하는 클래스의 인스턴스를 필요로합니다. 이 예제에서이 메서드는 Runnable을 구현하는 익명 클래스의 인스턴스를받습니다.

Runnable - run -이 모든 익명 클래스 인스턴스는 run 메서드 만 구현해야합니다.

자바 8에서

는, 거기에 람다 식 사용, 더 짧은 구문입니다 :

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

와우 멋진 데요. 내가 할 수있을 때 10 분 안에 받아 들일거야. –

0

invokeLater()의 매개 변수 Runnable를 구현해야합니다, 그리고이 경우에 anonymous inner class입니다 - 이름이없는 클래스 (이 경우) 하나의 객체 만 생성되고 명시 적으로 Runnable 인터페이스의 새 구현이 생성됩니다. 이것은 주로 레거시 코드에서 메소드 참조를 허용하는 데 사용되는 Java 해킹입니다. 새 코드에서는 대부분 대신 lambdasmethod references을 사용할 수 있습니다 (예 :

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

당신이 시간 때 단지 EventQueue에서 run()의 코드를 실행 선물이 특정 코드입니다.