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
,

Eclipse 에서 org.eclipse.jface.dialogs.Dialog 를 상속받아 Custom Dialog  를 구현하다보면,

setTitle() 이나 setImage() 등의 메소드가 존재하지 않아 당황 스러운 경우가 있다.


이때는 당황하지말고 protected void configureShell(Shell shell) 함수를 override 하면 title 이나 title image 등을 편집할 수 있다.

    @Override
    protected void configureShell(Shell shell) {
        super.configureShell(shell);
        shell.setText("My Custom Label");
    }


configureShell 함수 Override 전


configureShell 함수 Override 후



참고: http://wiki.eclipse.org/FAQ_How_do_I_set_the_title_of_a_custom_dialog%3F

Posted by leechwin
,

 프로그래머생활에 발담근지 꽤 되가지만 

 여태껏 윈도우즈에서 프로그램이 응답이 없거나 뻗었을 경우

 Ctrl + Alt + Delete 키로 Windows 작업 관리자를 띄우고 해당 프로세스나 프로그램을 죽이고는 했다.


 MS 에서 제공하는 Process Explorer 툴을 보고난후 지금까지 얼마나 바보같았는지 깨달았다.

역시 사람을 도구를 쓸줄알아야...


다음의 사이트에서 다운로드 받을 수 있다.


왼쪽이 기본 Windows 작업 관리자 이고, 오른쪽이 Process Explorer 이다.



Process Explorer 에서는 다양한 정보를 보여준다.

  • 실행중인 Process 들의 command line 인자
  • 실행중인 Process Path
  • 실행중인 Process 들과 fork 된 Process 들과의 관계
  • 실행중인 Process Kill, Restart, Suspend
  • 실행중인 Process Dump
  • CPU, Memory, I/O, Disk 사용량


기존 Windows 작업 관리자를 쓴다면 어서 설치하기를 권장한다.



Posted by leechwin
,