'console view'에 해당되는 글 1건

  1. 2009.03.30 Eclipse RCP 프로그램에서 Console 뷰 사용하기 (2)

얼마전에 Eclipse RCP 프로그램에서 Console 뷰 사용하기 라는 글을 썼는데, 몇가지 내용을 추가한다.

출력별로 색상지정하기

stdout 과 stderr 의 색을 다르게 지정하려면 그냥 MessageConsole 에서 MessageConsoleStream 을 두 개 만들어 각각 색을 지정하면 된다.

두번째 이후에 콘솔이 동작하지 않는 문제 해결하기

org.eclipse.ui.application.WorkbenchAdvisor 를 상속받은 클래스의 initialize(IWorkbenchConfigurer configurer) 메소드를 오버라이드하여 프로그램 상태를 저장하게 만든 경우 프로그램을 종료했다가 다시 띄우면 출력이 Console 뷰에 나타나지 않는다.

IPerspectiveFactory.createInitialLayout(IPageLayout layout) 메소드는 퍼스펙티브가 맨처음 떴을 때 호출되는데 , 설정을 저장한 이후부터는 이 메소드를 호출하지 않고 저장한 설정을 읽어서 퍼스펙티브를 초기화하기 때문이다.

이 문제를 해결하려면 MessageConsole 을 초기화하는 부분을 다른 곳으로 옮기면 된다. 나는 org.eclipse.ui.application.WorkbenchWindowAdvisor 를 상속받은 클래스의 postWindowOpen() 메소드 안으로 옮겼다. 이 메소드가 호출된 시점에서는 Display가 생성되어있으므로 이를 이용해 Console 출력의 색을 지정할 수 있다.

마지막으로 postWindowClose()를 오버라이드하여 윈도우가 닫힐 때 표준출력과 표준에러를 원래대로 되돌려 놓는다.

    @Override
    public void postWindowOpen() {
        super.postWindowOpen();
        MessageConsole console = new MessageConsole("Console", null, true);
        sys_out = System.out ;
        sys_err = System.err ;
        
        MessageConsoleStream new_out = console.newMessageStream();
        // 표준 출력은 파란색으로
        new_out.setColor(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
        System.setOut(new PrintStream(new_out));
        MessageConsoleStream new_err = console.newMessageStream();
        // 표준 에러는 붉은색으로
        new_err.setColor(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
        System.setErr(new PrintStream(new_err));
        ConsolePlugin.getDefault().getConsoleManager()
                .addConsoles(new IConsole[] { console });
    }
    @Override
    public void postWindowClose() {
        System.setOut(sys_out) ;
        System.setErr(sys_err) ;
        super.postWindowClose();
    }
Posted by lispholic
,