2012-04-26 3 views
6

누군가이 두 가지의 차이점을 강조 표시하고 인스턴스가 모두 필요합니까?!EventQueue.invokeLater vrs SwingUtilities.invokeLater

나는 둘 다를 사용하지만 하나가 다른 것보다 낫다는 것을 알고 싶은 응용 프로그램을 가지고 있습니다. 분명히 그들은 둘 다 Runnable object을 받아들입니다. 그래서 나에게 - 나는 내가 좋아하는 것을 사용할 수 있다고 생각합니다.

왜 두 클래스가 서로 다른 클래스에서 작동합니까? 나는 그 중 하나가 awt와 다른 스윙에 있다는 것을 알고 있지만, 같은 것을하지는 않습니까?

+1

가능한 복제본 [SwingUtilities.invokeLater() vs EventQueue.invokeLater()] (http://stackoverflow.com/questions/8847083/swingutilities-invokelater-vs-eventqueue-invokelater) – xmedeko

답변

12

SwingUtilities.invokeLaterEventQueue.invokelater이 1.2에 도입 되었기 때문에 존재하지만, 1.1에서는 스윙을 사용할 수있었습니다. JRE의 스윙은 항상 EventQueue 버전이라고 불렀습니다. swingall.jar은 구성 요소를 생성 한 곳에서 해킹을했고, 다시 칠하기에 보류중인 작업을 실행했습니다.

invokeLater은 약 EventQueue입니다. 이 방법을 직접 사용하는 것이 좋습니다. SwingUtilities은 덤핑 단지에 불과합니다. Swing이 AWT에 의존하지 않는다는 믿음의 일부로 아마도 SwingUtilities.invokeLater을 사용하여 많이 보았습니다.

4

javadoc에 설명되어있는 것처럼 동일합니다. invokeAndWait 메소드의 javadoc에서 복사 - 붙여 넣기는 1.3로

이 방법은 java.awt.EventQueue.invokeAndWait() 단지 커버입니다

그래서

당신이 그들을 혼합 할 수 있습니다 그것은 중요하지 않습니다 어떤 버전을 사용하는지 확인하십시오.

5

사실 SwingUtilities의 번호를 invokeLater (Runnable를 doRun)의 코드는 다음과 같습니다

public static void invokeLater(Runnable doRun) { 
    EventQueue.invokeLater(doRun); 
} 

그래서 정확히 같은 일이!