【发布时间】:2016-02-29 14:07:03
【问题描述】:
我正在尝试用 Java 执行 julia.exe。
代码如下:
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。
我需要在我的java项目中执行C:/Program Files/Julia-0.4.1/bin/julia.exe C:/Users/Thomas/Julia/test.jl,并在eclipse的控制台上得到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.程序应该做什么? 2. 您是否适当地处理流程的流?
-
您对可执行文件的位置有管理员权限吗?
-
当“什么都没有发生”时,实际上没有发生的事情就是失败。所以有些东西在起作用,否则你会得到一个错误。问题变成了:你期望发生什么?如果你认为调用 exec() 会像那样产生控制台输出,那你就错了。
-
两件事:1:你.waitFor() julia 进程完成...... 之前 你开始并捕获输出......?! 2:我不明白为什么你在
System.out.println之前缓冲 julia 的输出 - 你可以“随时打印”。还等待完整的行可能会阻塞?