Eclipse插件 - 延迟写入控制台

问题描述:

我正在开发一个读取和写入控制台的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()); 
    } 

的情况下,有一个线程问题,但这只是延迟了写入控制台的时间。任何想法发生了什么?

----编辑-----

在情况下,它是非常有用的,下面是这些方法的代码...

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; 
    } 

} 

尝试使用myConsole.getDocument().set(output)写到控制台,而不是使用流。

我不知道这是否是建议的做法,但它解决了我们的问题...