답변

2

당신은 Display.asyncExec()

백그라운드 스레드가 UI 스레드에 속하는 개체에 대한 작업을 수행 할 수 있도록하는 데 사용할 수있는, 방법 syncExec(Runnable runnable)DisplayasyncExec(Runnable runnable)이 사용됩니다.
모든 스레드에서 호출 할 수있는 유일한 방법은 SWT입니다.
- 에 의해 실행 가능한 실행 가능 - 백그라운드 스레드가 실행 가능한 완료를 기다리는 원인이됩니다 ( ). 또는 백그라운드 스레드가 비동기 적으로 결과를 기다리지 않고 비동기 적으로 실행되도록 허용합니다.

syncExec()을 사용하여 실행되는 실행 가능 파일은 UI 작업에 대한 동등한 직접 호출과 가장 일치합니다. Java 메소드 호출은 계속 진행하기 전에 항상 결과를 기다리기 때문에 syncExec()과 같습니다. this thread에 의해 도시 된 바와 같이

: 나는 모든 사람보다 Runnable 또는 내가 'Threads을'이다 Display.sync 또는 asyncExec에게 줄 스레드를 생각하고는 UI 스레드와 함께 JVM 또는 무언가가 예약받을

!
그들은 스레드로 간주되지 않지만 UI 스레드에 의해 비동기 적으로 실행되는 코드 조각만을 알았습니다!

UI 스레드에 의해 비동기 적으로 실행되는이 코드 부분은 다른 스레드에서 값 (동기화 된 액세스)에 액세스하는 좋은 장소 일 수 있습니다.

UI 스레드에 값을 전달하는 구체적인 예는 "How to update a GUI from another thread in Java"을 참조하십시오.

(참고 : 비 일식 비 SWT 방법은 I mentioned a year ago 같은 스윙 노동자를 사용하여 스윙에 있었을 것이다)

+0

감사합니다. syncExec 부분이 있습니다. 실제 배경 스레드에서 정보를 얻으려면 syncExec를 호출하고 run() 메서드에서 실제 bg 스레드를 예약 한 다음 폴링 및 잠자기 결과를 기다리는 것보다 더 나은/권장 된 방법이 있는지 궁금합니다. 예를 들어, 두 프로세스를 이벤트 처리기와 동기화합니까? (예를 들어, 네트워크 결과를 기다리고 있는데, UI 스레드에서 호출 할 수 없습니다.) – Jake

1

조금 늦게이 하나에지고,하지만 난 조직을 사용합니다. eclipse.ui.progress.UIJob.

UI가 아닌 스레드가 UI에 보낼 정보가 있으면 특정 디스플레이에서 실행되는 UIJob을 생성 할 수 있습니다. 백그라운드에서 asyncExec이 사용되지만 ProgressMonitor, 작업 취소, 규칙 스케줄링 및 다른 작업에 대한 가입/대기와 같이 Jobs API의 멋진 부분을 많이 얻게됩니다.

+0

결국 내가했던 것과 비슷합니다. http://www.critical-masses.com/jakeofalltrades/displaying -progress-eclipse-ui-wwud – Jake

관련 문제