我刚开始使用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上进行任务。抱歉我的英文。
答案 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线程中的其他代码运行。