2011-10-16 2 views
0

이벤트 분리 스레드 (EDT)에서 관리 할 이벤트를 이해하려고합니다.Java Event Dispatch Thread에서 발생하는 코드의 범위 이해

간단한 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(); 
     } 
+0

JOptionPane 예제는 EDT에서만 수행해야하는 한 줄짜리 거래이므로 최상일 수 없습니다. –

+0

JOptionPanes가 EDT에서 호출되어 비현실적이지 않은 코드를 작성했습니다. – Elliott

+0

아, 위에서 언급 한 것처럼 EDT에서 JOptionPane을 호출해야한다는 것에 동의합니다. –

답변

2

지금까지 내가, 다음의 모든 "이벤트"동부 서머 타임에 실행됩니다 기억할 수 : 직접 최종 사용자 (마우스 이벤트, 키 이벤트) 및 모든 상위 레벨에 의해 트리거

  • 모든 이벤트 이것들에 의해 촉발 된 사건들 (행동, 집중력 ...); 실제로 모든 AWT 및 Swing EventListeners는 항상 EDT에서 호출됩니다.
  • 모든 페인트 코드 (영역 변경이 필요할 때마다 구성 요소의 변경 또는 위젯 크기 또는 위치의 변경에 의해 트리거 됨)
  • 코드 SwingUtilities.invokeAndWait() 또는 SwingUtilities.invokeLater()을 통해 호출됩니다.
1

모든 JOptionPane 대화 상자는 모달 :

은 아래를 참조

엘리엇에게,

감사가 다른 창에 사용자가 생성 한 입력 이벤트를 차단하지만, EventQueue 이벤트를 계속 처리합니다 모든 창문. 이 DialogTest에서는 JOptionPane.showMessageDialog()이 입력을 기다리는 동안 애니메이션이 계속됩니다. 관련 토론은 here입니다.