2015-11-12 6 views
0

Goodmorning ребята,OutputStream писать только тогда, когда я закрываю Eclipse, Application

Я пытаюсь разработать плагин Eclipse, который запустить внешнюю программу с ProcessBulder.

Во время exectution я пытаюсь записать вывод на диск, но плагин ничего не пишет до тех пор, пока я не закрою выполнение приложения 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 написан после окончания затмения. Как я могу получить выход до этого закрытия?

ответ

0

Я уже пытался использовать команды.flush() перед вызовом метода close(), но это ничего не меняет.

Вместо этого, если я пишу несколько файлов, в качестве примера file-1.xml, file-2.xml, file-3.xml, файлы с номерами один и два были записаны до закрытия приложения и файл номер три был написан только после закрытия.

0

Я не уверен, что это поможет, но попытаться изменить это:

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

Для этого:

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

Мое предположение основано на том, что вы создаете новый экземпляр OutputStream, когда вы вызываете его из процесса, а не используете OutputStream, который вы только что использовали в своем Writer. Возможно, неправильно, хотя я не могу попробовать прямо сейчас. –

0

Используйте другой конструктор, чтобы иметь набор режимов autoflush (see Javadoc).

PrintWriter commands = new PrintWriter(out, true); 

Изменение этого параметра позволяет сохранить код с минимальными изменениями.

Каждый звонок println, printf и format автоматически сбрасывает буфер, устраняя проблемы.