2012-01-08 10 views
2

コンソールに読み書きするEclipseプラグインを開発しています。次のコードでは、 "Hello World"という警告ウィンドウが表示されます。Eclipseプラグイン - コンソールへの書き込みの遅れ

public void run(IAction action) { 
     ConsoleCommands.writeToConsole("Hello World!"); 
     Alert(ConsoleCommands.readConsole()); 
    } 

ただし、アラートには単に空白が表示されます。スレッドの問題があったいくつかの調査は、読み取り、書き込みの前に起こったことを示した(コンソール上に表示するだけのアラートは、コンソールの前の状態を示していた、大丈夫だった)ので、私が試した、場合

public void run(IAction action) { 
     ConsoleCommands.writeToConsole("Hello Wolrd!"); 
     try { 
      Thread.sleep(4000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     Alert(ConsoleCommands.readConsole()); 
    } 

これは単にコンソールへの書き込みも遅らせるだけです。どのようなアイデアが起こっている?

---- EDIT -----それは便利だ場合

が、ここではメソッドのコードです...

import org.eclipse.jface.text.IDocument; 
import org.eclipse.ui.console.ConsolePlugin; 
import org.eclipse.ui.console.IConsole; 
import org.eclipse.ui.console.IConsoleManager; 
import org.eclipse.ui.console.MessageConsole; 
import org.eclipse.ui.console.MessageConsoleStream; 

import org.eclipse.jface.action.IAction; 
import org.eclipse.jface.dialogs.MessageDialog; 
import org.eclipse.jface.text.IDocument; 
import org.eclipse.jface.viewers.ISelection; 
import org.eclipse.ui.IWorkbenchWindow; 
import org.eclipse.ui.IWorkbenchWindowActionDelegate; 
import org.eclipse.ui.console.ConsolePlugin; 
import org.eclipse.ui.console.IConsole; 
import org.eclipse.ui.console.IConsoleManager; 
import org.eclipse.ui.console.MessageConsole; 
import org.eclipse.ui.console.MessageConsoleStream; 


public class ConsoleCommands { 

    private static MessageConsole findConsole(String name) { 
     ConsolePlugin plugin = ConsolePlugin.getDefault(); 
     IConsoleManager conMan = plugin.getConsoleManager(); 
     IConsole[] existing = conMan.getConsoles(); 
     for (int i = 0; i < existing.length; i++) 
      if (name.equals(existing[i].getName())) 
       return (MessageConsole) existing[i]; 
     // no console found, so create a new one 
     MessageConsole myConsole = new MessageConsole(name, null); 
     conMan.addConsoles(new IConsole[] { myConsole }); 
     return myConsole; 
    } 

    public static String readConsole() { 
     MessageConsole myConsole = findConsole("Joe's Console"); 
     IDocument doc = myConsole.getDocument(); 
     return doc.get(); 
    } 

    public static MessageConsole writeToConsole(String output) { 
     MessageConsole myConsole = findConsole("Joe's Console"); 
     MessageConsoleStream out = myConsole.newMessageStream(); 
     out.println(output); 
     return myConsole; 
    } 

} 

答えて

1

myConsole.getDocument().set(output)を使用して、コンソールに書き込む代わりに使用してみてくださいストリーム。

これが推奨されているのかどうかわかりませんが、私たちの問題を解決しました...

関連する問題