2012-08-30 4 views
0

Eclipse 플러그인 내에서 대화 상자를 작성하려면 SWT를 사용하려고합니다. 쉘 및 표시 객체를 만들 수 있지만 아무런 문제없이 코드가 컴파일되지만 플러그 인을 디버깅 할 때 어떤 대화 상자도 표시되지 않지만 독립 실행 형 응용 프로그램에서 사용할 때 동일한 코드가 완벽하게 실행됩니다. 여기 Eclipse 플러그인 내에서 SWT 사용

내가 IWorkbenchWindowActionDelegate

Display display = new Display(); 
Shell shell = new Shell(display); 
shell.open(); 


while(!shell.isDisposed()) 
{ 
    if(!display.readAndDispatch()) 
    { 
     display.sleep(); 
    } 
} 

display.dispose(); 

나는 또한 readAndDispatch을 제거하는 노력이 코드를 작성하고 그것은 여전히 ​​작동하지 않습니다를 구현하는 SampleAction에의 실행 방법 안에 쓴 예제 코드입니다 .. 나는 아무것도 볼

Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.open(); 
    MessageDialog dialog = new MessageDialog(shell, "My Title", null, 
      "My message", MessageDialog.ERROR, new String[] { "First", 
      "Second", "Third" }, 0); 
    int result = dialog.open(); 
+0

정보가 충분하지 않습니다. 예상대로 작동하지 않는 코드를 게시 해보십시오. –

+0

@ E-Riz ok 일부 예제 코드를 추가했습니다. – cipher

+0

수면을 읽고 읽고 파견 한 부분을 제거하십시오. 이는 독립 실행 형 응용 프로그램에만 해당됩니다. – nitind

답변

3

이렇게하면됩니다. 새로운 셸을 미리 열 필요가 없습니다. 새 쉘을 MessageDialog으로 전달하십시오.

MessageDialog dialog = new MessageDialog(new Shell(), "My Title", null, 
     "My message", MessageDialog.ERROR, new String[] { "First", 
     "Second", "Third" }, 0); 
int result = dialog.open(); 

당신은 또한 당신이 현재있는 GUI 부분의 parentShell을 사용하고 대화에 전달할 수 있습니다.

1

새 쉘을 모달 대화 상자의 부모로 사용하면 대화 상자가 기본 워크 벤치 창 뒤에 표시 될 수 있으므로 대화 상자를 볼 수 없으며 기본 워크 벤치 창에서 아무 것도 할 수 없으므로 사용자에게 불편 함을 줄 수 있습니다 . 해결 방법은 창 쉘을 대화 상자의 부모로 전달하는 것입니다. 액션이 IWorkbenchWindowActionDelegate이므로 init 메소드에 전달 된 윈도우를 기록한 다음 window.getShell()을 사용하여 부모 쉘을 가져와야합니다.

플러그인을 작성할 때 디스플레이를 만들거나 이벤트 대기열 (readAndDispatch)을 실행하면 안됩니다 (별도의 주제 인 모덜리스 대화 상자를 원하지 않는 경우).