我正在尝试使用我的java程序中的C库(CFM-ID)。 C项目的bin文件夹中有可执行文件。 当我从终端运行C项目时,它的工作。
cd /home/lclab/cfm-svn/cfm/bin
./fraggraph-gen CC 2 + fullgraph
fraggraph-gen是可执行文件。然后我用我的java程序
尝试了Runtime rt = Runtime.getRuntime();
String command = "/home/lclab/cfm-svn/cfm/bin/fraggraph-gen CC 2 + fullgraph";
Process pr= rt.exec(command);
InputStream in = pr.getInputStream();
System.out.println(in.read());
但它总是返回-1。 然后我创建了C程序并实现了可执行文件。
#include <stdio.h>
int main( int argc, char *argv[] ) {
if( argc == 2 ) {
printf("The argument supplied is %s\n", argv[1]);
}
else if( argc > 2 ) {
printf("Too many arguments supplied.\n");
}
else {
printf("One argument expected.\n");
}
}
通过我的Java程序通过更改命令变量来执行它。
String command = "/home/lclab/Desktop/jni/test param1";
它的工作。请善意为我解决这个问题。感谢
答案 0 :(得分:0)
以下调试步骤可能会对您有所帮助:
检查您在dumy可执行文件中提供的参数。打印它们并与预期结果进行比较。
您不需要使用waitFor:pr.waitFor()
您可能希望为子流程打印错误流:pr.getErrorStream()
从终端,您首先使用cd
命令更改目录,但不是从Java执行时。考虑在执行流程之前设置流程目录,例如ProcessBuilder