Java进程总是返回-1

时间:2017-08-14 10:20:47

标签: java c

我正在尝试使用我的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";

它的工作。请善意为我解决这个问题。感谢

1 个答案:

答案 0 :(得分:0)

以下调试步骤可能会对您有所帮助:

  1. 检查您在dumy可执行文件中提供的参数。打印它们并与预期结果进行比较。

  2. 您不需要使用waitFor:pr.waitFor()

  3. 您可能希望为子流程打印错误流:pr.getErrorStream()

  4. 从终端,您首先使用cd命令更改目录,但不是从Java执行时。考虑在执行流程之前设置流程目录,例如ProcessBuilder