2014-12-16 2 views
0

디스플레이를 삭제할 때 스레드 풀 스레드는 항상 swt syncExec 호출에 응답하지 않습니다. 어떻게 이런 상황을 피하고 스레드를 완전히 종료 할 수 있습니까? 셸 disposeListener 내부에서 shutdownNow를 호출하면 작동하지 않습니다.종료 ThreadPool- 스레드가 swt에 걸려 있음 syncExec

다음 예제는 스레드 풀 스레드에 의해 실행되는 실행 파일을 보여줍니다. 당신은 여기에 전체 코드를 찾을 수 있습니다 DoSomething에서 http://www.java-forum.org/awt-swing-javafx-and-swt/164617-threadpool-sicher-beenden-verwendung-swt-widgets-display-syncexec.html

private class DoSomething implements Runnable { 
    public void run() { 
     try { Thread.sleep(500); } catch(InterruptedException e) {e.printStackTrace();} 
     if(!shell.isDisposed()) { 
     display.syncExec(new Runnable() { 
      public void run() { 
       drawshit(display); 
      } 
     }); 
     } 
     } 
    } 
} 

답변

0

syncExec() 통화가 죽은 잠금을 일으키는 원인이된다. syncExec()asyncExec()으로 바꾸면 스레드 풀이 정상적으로 종료됩니다. syncExec()을 사용해야하는 특별한 이유가 있습니까?

또는 문제를 피하려면 별도의 스레드에서 종료 코드를 실행할 수 있어야합니다.

+0

감사합니다. 스레드 풀은 syncExec() 호출로 수집 된 데이터에 대해 일부 작업을 수행하므로 스레드 풀은 결과를 기다려야합니다. – Twiggy