0

Eclipse RCP アプリケーションでいくつかのログ情報を表示したいと考えています。このために、別のプラグイン (シングルトン) で Eclipse ビューを作成しました。これまでに取得したコードは次のとおりです。

public class Console extends ViewPart {    
    private StyledText text;

    public Console() {}

    @Override
    public void createPartControl(Composite parent) {
        text = new StyledText(parent, SWT.READ_ONLY | SWT.MULTI | SWT.H_SCROLL
                | SWT.V_SCROLL);
    }

    @Override
    public void setFocus() {
        this.text.setFocus();
    }

    public void log(String message){
        this.text.append(message);
    } 
}

そして構成:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
  <extension
        point="org.eclipse.ui.views">
     <view
           category="org.myApp.ui.category.myApp"
           class="org.myApp.ui.log.Console"
           icon="icons/log.png"
           id="org.myApp.ui.view.console"
           name="Console"
           restorable="true">
     </view>
     <category
           id="org.myApp.ui.category.myApp"
           name="myApp">
     </category>
  </extension>
</plugin>

StyledTextここで、他のプラグインからインスタンスへのメッセージをログに記録したいと思います。これを行う最も便利な方法は何ですか?

私はこのアプローチを試しましたが、便利ですが、本当に遅いです。私は本当にあなたの助けに感謝します:)ありがとう!

4

2 に答える 2

0

OSGIでのログインに関する優れた一連の記事を次に示します。

于 2012-07-20T06:42:41.000 に答える
0

これが私のコンソール部分の構築後の方法です。基本的に、新しい System.out オブジェクトを設定してリッスンします。

@PostConstruct
public void postConstruct(Composite parent) {

    System.out.println("[Console Part] ** Post Construct **"); 

    txtConsole = new Text(parent, SWT.READ_ONLY | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);

    out = new OutputStream() {

        @Override
        public void write(int b) throws IOException {
            if( txtConsole.isDisposed() )
                return;
            txtConsole.append(String.valueOf((char) b));
        }
    };

    // keep the old output stream
    final PrintStream oldOut = System.out;

    System.setOut(new PrintStream(out));
    txtConsole.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            System.setOut(oldOut);
        }
    });
}
于 2014-01-15T17:40:22.557 に答える