2016-04-05 14 views
0

RCPを使用してJavaベースのアプリケーションを書き始めました。私は私のアプリでコンソールビューを追加しようとしており、log4jの情報をコンソールに出力しようとしています。今それは動作します。しかし、問題は1行に1回ずつ出力されますが、メソッドの終了後にすべての情報を出力します。Eclipse RCPアプリケーションでコンソールビューを使用する方法

Object[] elements = tableViewer.getCheckedElements(); 
    if(elements.length > 0){ 
     for(Object ele : elements){ 
      File file = (File) ele; 
      logger.info("log4j处理目录" + file.getAbsolutePath()); 
      MessageConsoleStream stream = ConsoleFactory.getConsole().newMessageStream(); 
      stream.println("println处理目录" + file.getAbsolutePath()); 
      try { 
       stream.flush(); 
       stream.close(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

私はstream.println()stream.flush()を使用しようとしましたが、動作しません。 私は初めてstackoverflowを求めています。私の英語のために申し訳ありません。

答えて

1

ユーザーインターフェイススレッドでThread.sleep(1000)を呼び出すとUI全体がブロックされ、何も起こりません。決してこれをしないでください。

timerExecの方法をDisplayというコードで実行する場合は、コードを実行します。

ような何か:MessageConsoleStreamため

Display.getDefault().timerExec(1000, new Runnable() { 
    @Override 
    public void run() 
    { 
    // TODO output one item to the log 

    // TODO if need to run again call 
    Display.getDefault().timerExec(1000, this); 
    } 
}); 

のJavaDocは言う:

クライアントは UIスレッドでこのストリームに大量の出力を書いて避ける必要があります。コンソールはUI スレッドで出力を処理する必要があり、クライアントが コンソールにUIスレッド書き込み出力をホッグすると、コンソールは出力を処理できません。

ですから、ループは常にUIスレッドの実行中に他のコードをさせることなく、ストリームに出力してはいけません。

+0

ありがとうございました。しかし、あなたはこれを見ています![] [https://github.com/tsingheng/shangtech-framework/blob/3.0.0/image-2.jpg] John

+0

画像や何かを編集するあなたの質問。 –

+0

申し訳ありません本当にイメージを挿入する方法がわかりません。 3つの画像をアップロードします.https://github.com/tsingheng/shangtech-framework/blob/3.0.0/image-2.jpg https://github.com/tsingheng/shangtech-framework/blob/3.0.0/ image-3.jpg https://github.com/tsingheng/shangtech-framework/blob/3.0.0/image-1.jpg – John

関連する問題