문제

나는 읽고 있었다 더러운 부자 고객 최근에 Java의 버전은 6이지만 동시 프레임 워크에 대한 언급은 없습니다. 따라서 그들은 java.util.timer 및 javax.swing.timer에 대해 이야기하지만 ExecutorService에 대해서는 이야기하지 않습니다.

나는이 질문에서 ExecutorService의 장점에 대해 읽었습니다. "Java 타이머 대 ExecutorService"그리고 후자를 전자보다 사용하기로 결정했습니다. 그러나이 책은 javax.swing.timer에 대해 이야기하며 스윙 개발에만 국한되는 장점입니다.

그렇다면 스윙 개발 (애니메이션 버튼 등)의 경우 javax.swing.timer가 여전히 더 나은 선택이거나 새로운 동시 프레임 워크에이를 대체하는 관련 클래스가 있습니까?

도움이 되었습니까?

해결책

스윙 타이머는 적어도 EDT에서 실행되므로 모든 것을 호출자로 랩핑 할 필요가 없습니다. 또한 액션, ActionListeners 및 기타 스윙 관련 클래스를 사용하므로 스윙과 잘 연결됩니다.

스윙 관련 작업을 위해 스윙 타이머를 고수하고 GUI 업데이트와 관련이없는 것들에 새로운 동시 패키지를 사용합니다.

살펴보십시오 스윙 애플리케이션에서 타이머 사용 더 많은 정보가 포함될 수 있으므로 (죄송합니다) 결정을 내릴 수 있습니다.

다른 팁

간단한 스윙 관련 물건의 경우 더 나은 선택은 javax.swing.Timer 언급 된 장점 때문에 여기.

스윙 타이머의 작업은 이벤트 디스패치 스레드에서 수행됩니다. 이는 작업이 구성 요소를 안전하게 조작 할 수 있음을 의미하지만 작업이 빠르게 실행되어야 함을 의미합니다.

반면, 비 스윙 관련 또는 더 복잡한/긴 처리 작업을 수행 해야하는 경우 ExecutorService 매우 강력하고 갈 길입니다.

Bruno가 조언 한 것에 대한 제안은 단지 우수한 Java 1.5+ 동맹 유틸리티를 이용하기위한 패턴이 스윙을 깨는 것입니다. ExecutorService 브루노가 말했듯이 모든 무거운 리프팅을하지만 일단 완료되면 ExecutorService 스레드는 실제 UI 구성 요소와의 상호 작용을 다음 중 하나를 사용하여 실행 가능한 AWT 스레드에 전달해야합니다.

  • javax.swing.SwingUtilities.invokeAndWait(Runnable doRun)
  • javax.swing.SwingUtilities.invokeLater(Runnable doRun)

이러한 메소드는 AWT 스레드에 의해 실행 가능하도록 통과합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top