2013-10-29 6 views
1

dumpStackTrace의 첫 번째 요소가 java.awt.EventDispatchThread.run에있는 경우 isEventDispatchThread()가 false를 반환하는 이유는 무엇입니까?isEventDispatchThread가 실행 중이지만 EventDispatchThread.run에서 실행 중일 때

SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      doStuff(); 
     } 
    }); 

    public void doStuff(){ 
     Thread.dumpStack(); 
     System.out.print(" [addToParents] " 
      + ((SwingUtilities.isEventDispatchThread() 
      ? "out of EDT" : " in EDT "))); 
    } 

수율 :

[addToParents] out of EDT 
java.lang.Exception: Stack trace 
    at java.lang.Thread.dumpStack(Thread.java:1342) 
    at pt.up.fe.dceg.neptus.gui.MissionBrowser.doStuff(MissionBrowser.java:899) 
    at pt.up.fe.dceg.neptus.gui.MissionBrowser.access$6(MissionBrowser.java:883) 
    at pt.up.fe.dceg.neptus.gui.MissionBrowser$3.run(MissionBrowser.java:1221) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:682) 
    at java.awt.EventQueue$3.run(EventQueue.java:680) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 

이 간략화 코드 (되지 MWS). 내가 MWS가 필요하다면 나에게 하나도 포함시키지 않았다는 생각이 들었다.

답변

4

아니요, 아닙니다. 당신의 삼항 연산자의 표현에서 :

(SwingUtilities.isEventDispatchThread() ? "out of EDT" : " in EDT "))) 

SwingUtilities.isEventDispatchThread()"Out of EDT"을 인쇄하는 이유입니다 true을 반환합니다.

표현식이 condition ? value1 : value2 인 경우 : condition이 참이면 결과는 value1이고 그렇지 않은 경우 결과는 value2입니다.

+0

@kotoko와 EDT는 API에서 구현 된 모든 이벤트가 완료된 후 종료되었습니다. 몇 초 후, 스윙 GUI에 대한 모든 업데이트가 다시 그려졌습니다. – mKorbel

+0

이제 바보가됩니다 ... 감사합니다. – kotoko

관련 문제