Java 의 SWT 관련 Component 들을 사용하다가 다음과 같이 Invalid thread access 라는 Error 가 발생하는 경우가 있다.

   org.eclipse.swt.SWTException: Invalid thread access

at org.eclipse.swt.SWT.error(SWT.java:4282)

at org.eclipse.swt.SWT.error(SWT.java:4197)

at org.eclipse.swt.SWT.error(SWT.java:4168)

at org.eclipse.swt.widgets.Display.error(Display.java:1210)


 외부 Thread 에서 SWT Component 를  사용하려고 할 때 발생하는 에러로 SWT Component 는 UI 스레드에서만 Access 가능하다. 

 그렇기 때문에 이를 해결하려면 UI Thread 내에서 SWT Component 를 사용하도록 바꿔야 한다. 

 다음 메소드를 사용하여 UI Thread 내에서 Job 들을 수행할 수 있다.


Display.getDefault().syncExec(new Runnable() {
    @Override
    public void run() {
        // swt code
    }
});

Display.getDefault().asyncExec(new Runnable() {
    @Override
    public void run() {
        // swt code
    }
});



참고: http://stackoverflow.com/questions/5980316/invalid-thread-access-error-with-java-swt

Posted by leechwin
,