2011-10-22 4 views
2

. SWT에서 내가하고 싶은 일을하기 쉽지 않은 것에 대해 좌절감을 느꼈습니다. 그래서 저는 스윙을 사용했습니다. 스윙은 내 삶을 편하게 만들었습니다. 예. 지금을 제외하고는 두 사람이 이야기해야합니다. 문제는, 서로 다른 스레드에서 실행되고, 나는 스윙에서 SWT의 GUI 방법을 실행하려고 할 때마다, 내가 얻을 :SWT/스윙 -> 내가 SWT 응용 프로그램이 스레드 N '지옥

Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access 

오 기쁨을. 그래서 어떻게 해결할 수 있습니까? 이것이 Objective-C 인 경우 다음을 사용할 수 있습니다.

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait 

하지만 그렇게 할 수는 없습니다. 스레드 B에서 메서드 A를 실행할 방법이 없습니까? 해당 스레드가 존재하면?

답변

4

내가 SWT와 많은 일을하지 않은 있지만 SWT는 비 UI 스레드에서 SWT 객체에 접근 금지 striclty 것으로 보인다. SWT의 객체에 대한 대화 요청을 큐에 넣을 수 있습니다.

This 링크는이 더 나은

예는

display.syncExec(
    new Runnable() { 
    public void run(){ 
     label.setText(text); 
    } 
    }); 

내가 주 SWT의 UI 스레드에서 실행 가능한을 큐에 따라서 접근이 법적 것이다 가정 할 수있다이 syncExec

사용하는 제안을 설명합니다.

참고 : 링크를 다시 읽으면 syncExec이 스윙 EDT의 동결을 초래합니다. 당신이 syncExec를 호출 할 경우, SWT 큐에 Runnable를 던져하고이 완료 될 때까지 기다립니다. 당신은 큐에 실행 가능한 던져 작업에서 계속 asyncEvent 볼 수 있습니다.

+0

감사합니다! 그건 완전히 트릭을 했어! 나는 동기화와 비동기도 주목했다. 내 목적에 따라 더 잘 작동하는지, 아마 둘 다 : D. –

관련 문제