如何在Eclipse RCP应用程序中使用控制台视图

时间:2016-04-05 09:56:54

标签: java eclipse rcp

我刚开始使用RCP编写基于Java的应用程序。我试图在我的应用程序中添加一个控制台视图,并将log4j的信息输出到控制台。现在它有效。但是有一个问题,它不能像每行一样执行eclipse巫婆输出,但是在方法完成后输出所有信息。

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 个答案:

答案 0 :(得分:1)

在用户界面线程中调用Thread.sleep(1000)将阻止整个UI,不会发生任何事情。永远不要这样做。

如果您想每秒执行一次,请使用timerExec Display方法运行代码。

类似的东西:

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

MessageConsoleStream的JavaDoc说:

  

客户端应该避免在此流中写入大量输出   UI线程。控制台需要在UI中处理输出   线程,如果客户端占用UI线程写入输出到   控制台,控制台将无法处理输出。

所以你必须循环不断输出到流而不让UI线程中的其他代码运行。