【问题标题】:Outputstream write only when I close Eclipse Application仅当我关闭 Eclipse 应用程序时才写入输出流
【发布时间】:2015-11-12 11:32:12
【问题描述】:

各位早安,

我正在尝试开发一个使用 ProcessBulder 运行外部程序的 Eclipse 插件。

在执行过程中,我尝试将输出写入磁盘,但插件在我关闭 Eclipse 应用程序的执行之前不会写入任何内容。

public void run() 
    {
        ProcessBuilder pb = new ProcessBuilder("NuSMV.exe","-int");
        Process process = null;
        try {
            process = pb.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
        OutputStream out = process.getOutputStream();
        // Write commands
        PrintWriter commands = new PrintWriter(out);        
        commands.println("reset");
        commands.println("set default_trace_plugin 4");             
        commands.println("read_model -i C:\\temp/ascensore.smv");               
        commands.println("go");
        commands.println("check_ctlspec");
        commands.println("show_traces -o C:\\temp/showtraces.xml");     
        commands.close();
        process.getOutputStream().close();

    }   

Showtraces.xml 是在eclipse 结束后编写的。我怎样才能在关闭之前获得输出?

【问题讨论】:

    标签: java eclipse-plugin outputstream processbuilder


    【解决方案1】:

    先冲洗打印机,然后关闭它。

    commands.flush();
    

    参考。 http://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html#flush--

    【讨论】:

      【解决方案2】:

      我不确定这是否会有所帮助,但请尝试更改:

      commands.close();
      process.getOutputStream().close();
      

      到这里:

      commands.flush();
      commands.close();
      out.flush();
      out.close();
      

      【讨论】:

      • 我的假设是基于当您从进程调用它时创建一个新的 OutputStream 实例,而不是使用您刚刚在 Writer 中使用的 OutputStream。不过可能是错的,因为我现在不能尝试。
      【解决方案3】:

      我已经尝试在调用 close() 方法之前使用 commands.flush(),但这不会改变任何东西。

      相反,如果我写入多个文件,例如 file-1.xml、file-2.xml、file-3.xml,则在我关闭应用程序和文件之前写入第一个和第二个文件第三个是在关闭后才写的。

      【讨论】:

        【解决方案4】:

        使用另一个构造函数来设置 autoflush 模式 (see Javadoc)。

        PrintWriter commands = new PrintWriter(out, true);
        

        更改此设置可以让您的代码保持最小的更改。

        每次调用 printlnprintfformat 都会自动刷新缓冲区,从而解决您的问题。

        【讨论】:

          猜你喜欢
          • 2021-10-27
          • 1970-01-01
          • 2018-12-11
          • 2016-05-10
          • 2015-05-10
          • 1970-01-01
          • 1970-01-01
          • 2014-07-05
          • 1970-01-01
          相关资源
          最近更新 更多