在swt按钮onclick事件中,不会立即在控制台中打印Eclipse插件日志

时间:2016-05-25 11:03:29

标签: java eclipse plugins

打印我使用的登录控制台

MessageConsole console = new MessageConsole("System Output", null); 
ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] { console });             ConsolePlugin.getDefault().getConsoleManager().showConsoleView(console);
MessageConsoleStream stream = console.newMessageStream();
System.setOut(new PrintStream(stream));
System.setErr(new PrintStream(stream));

String rootPath="D:/luna/sampleproject";
System.setProperty("file.log",rootPath+"logs/log_console.log");

正确打印日志 我的问题是它不会立即在swt onclick事件中打印日志。它打印日志所有过程完成。

我的示例代码是:

button_Ok.addSelectionListener(new SelectionListener() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            log.info("Before invoking the api call");
            CreateDesign create=new CreateDesign();
            boolean status=create.createDesign();//api invoked
            log.info("Api invokoing is completed...");
        }

}

这里在完成api调用的整个过程后打印日志消息。

如何立即打印日志?

2 个答案:

答案 0 :(得分:1)

尝试使用

new PrintStream(stream, true)

使PrintStream构造函数更快地刷新流。

答案 1 :(得分:0)

我的解决方案是:   我通过使用像as这样的另一个线程来调用api调用 button_Ok.addSelectionListener(new SelectionListener(){

    @Override
    public void widgetSelected(SelectionEvent e) {
        log.info("Before invoking the api call");
        Thread thread = new Thread(new createDesigns());
        thread.start();
     }

}

在另一个班级

public class createDesigns实现了Runnable {

@Override
public void run() {
          CreateDesign create=new CreateDesign();
          boolean status=create.createDesign();//api invoked
}

}

所以它立即打印日志