我想从我的java程序中使用C库(CFM-ID)。 C项目的bin文件夹中有可执行文件。 当我从终端运行C项目时,它的工作。Java进程总是返回-1
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";
它的工作。请善待给我一个解决这个问题。由于
注意,当你从终端运行程序输入该程序的目录。当你从你的Java程序运行它时,你不是。你的程序做什么?它是否希望在自己的目录中运行? (也许是因为它访问那里的文件)。不知道你的C程序是做什么的,很难帮助你。 –
从'Process'的Javadoc:“从1.5开始,'ProcessBuilder.start()'是创建Process的首选方法。” - 这不会解决这个特定的问题,但它将使处理过程更简单。 – slim
感谢您的建议。我以相同的顺序执行了两个C程序(使用终端和Java)。两个程序都与终端一起工作,但只有测试程序正在使用java。图书馆不是。如何通过java运行C程序,哪个C程序在C项目中使用其他类? –