我想從我的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項目中使用其他類? –