2013-05-08 3 views
1

У меня очень странная и срочная проблема. Я надеюсь, что вы можете мне помочь. Я пытаюсь прочитать результат команды, которую я выполняю. Код никогда не достигает инструкции println. Это просто «подвешивает» программу , если достигнут конец выхода. Никакой сбой и никаких исключений. Пожалуйста, помогите мне. Я впадаю в отчаяние.Java/Scala Странное поведение readline

Мой проект представляет собой сочетание Scala и Java. Поэтому не имеет значения, на каком языке это решение. Я попытался в обоих. Кодировка моего проекта - Cp1252.

Вот мой код

var fileScript = Runtime.getRuntime().exec(PathOfScript) 
var isr:InputStreamReader = new InputStreamReader(fileScript.getInputStream()) 
var in = new BufferedReader(isr) 
var line:String = "" 
try { 
    while ({line = in.readLine(); line!= null}) { 
    println("line: "+line) 
    } 
    println("OUTSIDE !!!"); 
    in.close(); 
} 
+0

Выполняется ли процесс скрипта? Вы уверены, что он выводит вывод на stdout вместо stderr? –

+0

Что содержит PathOfScript var? Все тоже? – gbtimmon

+0

Путь «c: \\ nusmv \\ nusmv -source script.cmd». Весь выход доступен с кодом ... он просто «висит», если он достигает конца. Поэтому он думает, что все в стандарте. – user2363125

ответ

1

Это странно ... мой Java версия работает просто отлично:

 InputStreamReader isr = new InputStreamReader(new FileInputStream("c:\\anyfile")); 
     BufferedReader in = new BufferedReader(isr); 
     String line = ""; 
     try { 
      while ((line = in.readLine()) != null) { 
      System.out.println("line: "+line); 
      } 
      System.out.println("OUTSIDE !!!"); 
      in.close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

Я думаю, что проблема заключается в fileScript: если он дает поток и Безразлично Не закрывайте его, вы никогда не получите нуль в цикле while. Проверьте эту часть. Попробуйте с обычным файлом (как в моем примере). Если это работает, проблема, безусловно, связана с объектом fileScript.

+0

Да, это верно, но я не могу его использовать. Я могу сохранить вывод в файл с опцией в скрипте и прочитать файл. То все в порядке. Проблема в том, что требуется некоторое время, пока вывод не будет записан в файл. И я проверяю многие скрипты. Возможно ли решение проверить, уже ли файл уже написан, без Threads? Если я проверю с file.exists(), я получаю обратную связь false. Если я жду несколько миллисекунд, кажется, все в порядке. Но если код будет использоваться на более медленных системах, я не могу быть уверен, что он работает. – user2363125

+0

Вы можете попробовать его с помощью следующей команды (или, если у вас есть Linux, Ls):.. \t \t \t \t InputStreamReader ISR = новый InputStreamReader (Runtime.getRuntime() Exec ("CMD/с реж") getInputStream()); – Igor

+0

Да, что работает. Итак, проблема заключается в выходе моего скрипта? Я хочу поблагодарить вас заранее, Игорь, я ценю вашу помощь. – user2363125