我有一个Java程序需要通过Bash脚本调用某个C ++程序两次:一次在主类中,一次在另一个类中。这是我调用Bash脚本的代码:
String args1 = "bash.sh";
try {
Process proc = Runtime.getRuntime().exec(args1);
BufferedReader read =
new BufferedReader(new InputStreamReader(proc.getInputStream()));
proc.waitFor();
try {
proc.waitFor();
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
while (read.ready()) {
System.out.println(read.readLine());
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
这是Bash脚本(bash.sh
):
#!/bin/bash
/home/Codes/CPM_System/source/GcEqClass X_LE.txt 1 out
其中GcEqClass
是已编译的C ++程序,X_LE.txt
是输入文件,1
是参数,out
是输出文件。
问题是第一次运行上面的代码(即从主类开始),它运行正常,但第二次(即,来自不同的类),GcEqClass
无法打开X_LE.txt
用于阅读 - fopen
在此处返回NULL
:
in = fopen(filename,"rt");
if(in==NULL)
{
printf("Error: cannot open file %s for read\n", filename);
exit(-1);
}
奇怪的是,我尝试将两个调用放在主Java类中,然后它们都工作了;只有当一个人在主类中,而一个是不同的类时,第二个不起作用。