2013-10-04 2 views
3

내가 대화 상자를 팝업하는 것을 시도하고있다 (즉,의 FileDialog) 실제로 내가 관련 UI 런처 프로젝트 (http://lowcoupling.com/post/51877317162/the-acceleo-ui-launcher-project)이클립스 : 얻기 널 디스플레이

내가 통해 실행하고 Acceleo 변환의 전에 이클립스 플러그인에서, ... 관련 doGenerate 방법에서이 작업을 수행 할 수

public void doGenerate(IProgressMonitor monitor) throws IOException { 

    Display display = Display.getCurrent(); 
    System.out.println(display); 
    //.... 

을 시도하지만 난 어떻게해야합니까 내가 얻을 디스플레이가 null?

답변

5

IWorkbench#getDisplay() 상태의 문서 :

코드는 항상 표시 워크 벤치를 요구하기보다는 Display.getDefault()에 의존해야한다.

그래서 사용하는 대신

PlatformUI.getWorkbench().getDisplay() 

. 당신은 기본 디스플레이 Display.getDefault() 또는 워크 벤치 디스플레이 PlatformUI.getWorkbench().getDisplay()

는 UI 스레드에서 실행하지 않는 경우를 받고 시도 할 수

+2

'PlatformUI'를 사용할 수없는 '순수한'e4 응용 프로그램에서는 사용할 수 없습니다. 'syncExec'와'asyncExec'에 주입 할 수있는'org.eclipse.e4.ui.di.UISynchronize'를 사용하십시오. –

+0

@ greg-449 잘 알고 있습니다. 아직 e4를 사용하지 않았습니다. – Baz

1

나는 아직이 바라 보았다 있는지 확실하지 않습니다 만, 클래스 Display에 대한 문서, 그것은 말한다 Display.getCurrent() 반환

null 현재 실행중인 스레드에 대한 사용자 인터페이스 스레드가 아닌 경우 모든 디스플레이.

이것은 문제 일 수 있지만 더 자세한 정보가 없으면 알 수 없습니다.

+0

예 이것이 문제이지만 대화 상자를 표시 할 위치를 여전히 볼 수 없습니다. – lowcoupling

0

다음을 수행하십시오

Display.getDefault().syncExec(new Runnable() { 
    public void run() { 
     // ... do work that updates the screen ... 
    } 
}); 
+0

첫 번째 방법을 사용하는 것이 권장되지 않는다고 말하는 두 번째 방법이 있다는 것을 알고 계십니까? ;) – Baz

1

저도 같은 문제에 직면했다. 나는 Display.getCurrent() 대신에 getShell().getDisplay()을 사용했고 그것은 나를 위해 일했습니다.