2013-09-03 2 views
1

После обновления java до последней версии 7u25, runtime.getruntime(). Exec больше не работает.Runtime.exec не может работать на JDK 7u25

//jhghai_w.filepath = "C:\\aucs\\data\\tmp.txt"; 
br = new BufferedReader(new InputStreamReader(Runtime.getRuntime() 
        .exec("CMD.EXE /C \"C:\\Program Files\\juman\\juman.exe \" -e < "+jhghai_w.filepath) 
        .getInputStream())); 

Я уже прочитал ссылка: JDK 7u25: решения проблем, вызванных изменениями в Runtime.exec https://blogs.oracle.com/thejavatutorials/entry/changes_to_runtime_exec_problems

и попытался некоторые изменения, как показано ниже:

br = new BufferedReader(new InputStreamReader(Runtime.getRuntime() 
        .exec("CMD.EXE /C \"C:\\Program Files\\juman\\juman.exe -e < \""+jhghai_w.filepath) 
        .getInputStream())); 

и это:

br = new BufferedReader(new InputStreamReader(Runtime.getRuntime() 
        .exec(new String[] {"cmd","/C" "C:\\Program Files\\juman\\juman.exe"-e < ",jhghai_w.filepath}) 
        .getInputStream())); 

и этот:

br = new BufferedReader(new InputStreamReader(Runtime.getRuntime() 
        .exec(new String[] {"cmd","/C" "C:\\Program Files\\juman\\juman.exe","-e“,”<",jhghai_w.filepath}) 
        .getInputStream())); 

и это:

br = new BufferedReader(new InputStreamReader(Runtime.getRuntime() 
        .exec(new String[] {"cmd","/C" "\"C:\\Program Files\\juman\\juman.exe"","\"-e < \"",jhghai_w.filepath}) 
        .getInputStream())); 

Я даже заменить "jhghai_w.filepath" в "C: \ ППК \ Data \ tmp.txt" непосредственно. Но они не работают. В чем проблема в моей модификации?

ответ

1

Вы должны передать команду Runtime.exec() или ваш ProcessBuilder в качестве String-Array с тремя элементами: командой в качестве первой, «/ C» в качестве второй и командой, выполняемой в cmd, как третий элемент:

String[] command = new String[3]; 
command[0] = "CMD.EXE"; 
command[1] = "/C"; 
command[2] = "\"C:\\Program Files\\juman\\juman.exe \" -e < "+jhghai_w.filepath; 
ProcessBuilder pb = new ProcessBuilder(command); 
pb.start(); 

Смотрите также this blogpost особенно в этом разделе:


Золотое правило:

В большинстве случаев cmd.exe имеет два argume nts: "/ C" и команда для интерпретации.


Edit: обновленное решение ....

+0

@ user1629420: Вы правы, я обновил свое предложение - это действительно работает лучше в моем TestCase ... –

+0

Вы правы !!! После того, как я это сделал, программа работает! Спасибо вам всем. – user1629420

1

Вы не должны использовать Runtime.exec() для начала, для практических целей устарели. Лучше переключитесь на использование ProcessBuilder. Есть plenty из tutorials, чтобы показать вам путь.

Смежные вопросы