2015-11-26 2 views
0

Я пытаюсь выполнить julia.exe в Java.Выполнение команды julia.exe в Java

Вот код:

Process pTest = Runtime.getRuntime().exec("C:/Program Files/Julia-0.4.1/bin/julia.exe"); 

Когда я запускаю его, ничего не происходит.

Однако, если я попробую другой исполняемый файл, он работает хорошо. Например:

Process pTest = Runtime.getRuntime().exec("C:/Program Files/anotherProgram/program.exe"); 

program.exe будет работать так, как ожидалось.

julia.exe немного специальный.
Если я запустил его в командной строке, он будет выполнен в командной строке. Другими словами, он не откроет собственное окно.

Я сделал тест:

#julia script, it's path: C:/Users/Thomas/Julia/test.jl 
function test1() 
    println("it's test1") 
end 

test1() 

Я выполнить эту команду в командной строке:

C:\>C:/Program Files/Julia-0.4.1/bin/julia.exe C:/Users/Thomas/Julia/test.jl 

тогда я буду получать it's test1 в командной строке.

Мне нужно выполнить C:/Program Files/Julia-0.4.1/bin/julia.exe C:/Users/Thomas/Julia/test.jl в моем проекте java и получить it's test1 на консоли затмения.

Вот мой Java проект:

public class Main { 
    public static void main(String[] args){ 
     try { 

     String[] params = {"C:/Program Files/Julia-0.4.1/bin/julia.exe", "C:/Users/Thomas/Julia/test.jl"}; 

     Process pTest = Runtime.getRuntime().exec(params); 
     try { 
      if (pTest.waitFor() != 0) { 
       System.err.println("exit value = " + pTest.exitValue()); 
      } 
      BufferedReader in = new BufferedReader(new InputStreamReader(pTest.getInputStream())); 
      StringBuffer stringBuffer = new StringBuffer(); 
      String line = null; 
      while ((line = in.readLine()) != null) { 
       stringBuffer.append(line+"-"); 
      } 
      System.out.println(stringBuffer.toString()); 
     } catch (InterruptedException e) { 
      System.err.println(e); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

}

+1

Работает ли это при запуске командной строки? – Rao

+2

1. Что должна делать программа? 2. Соответствуете ли вы потокам процесса? –

+0

У вас есть права администратора на место исполняемого файла? – nullpointer

ответ

0

Я получил его наконец.

Как julia.exe выполнить в командной строке немедленно, мы должны предоставить права администратора пользователям cmd.exe.

1

Рассмотрим это изменилось (и работает) осуществление удаления слишком рано призывание waitFor и exitValue:

public class Main { 
    public static void main(String[] args) { 
    try { 

     String[] params = {"C:/Program Files/Julia-0.4.1/bin/julia.exe", 
       "C:/Users/Thomas/Julia/test.jl"}; 

     Process pTest = Runtime.getRuntime().exec(params); 
     BufferedReader in = new BufferedReader(new InputStreamReader(pTest.getInputStream())); 
     String line = null; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
     System.out.println("==="); 
     System.out.println("Julia exit value = " + pTest.exitValue()); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Этот произвел следующий результат с вашим тестовым сценарием:

it's test1 
=== 
Julia exit value = 0 
Смежные вопросы