我有一个 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 主类中,然后它们都起作用了;只有当一个在主类中,而一个是不同的类时,第二个才不起作用。