您好,并提前感谢, 我有以下问题:我有一个GUI和一个按钮,我需要启动一个在同一台机器上的c ++程序。该程序使用称为SSM(ROS like)的特定框架来共享数据。 程序本身从终端启动时工作正常,但是当我使用java进程构建器启动时,我无法访问任何数据,但我仍然可以看到该进程正在运行。
我使用的是Ubuntu 14.04和OpenJDK7。我使用的代码如下(根据评论更新):
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectOutput(Redirect.INHERIT);
builder.redirectError(Redirect.INHERIT);
builder.start();
其中命令来自我通过UDP接收的一些数据:
command[0] = Main_gui.getHomePath()+"PFforAEV_autoCalib_20140418/PFforAEV0.2.2";
command[1] = String.valueOf(initialPosition[0]);
command[2] = String.valueOf(initialPosition[1]);
command[3] = String.valueOf(initialPosition[2]);
command[4] = "walllandmark_F41_20130125";
更具体地说,进程 PFforAEV0.2.2 正在运行,但似乎它不使用任何CPU或内存。我无法通过框架访问数据。看起来好像只是悬挂。
如果您需要更多详细信息,请询问。
有人能帮助我吗? 谢谢。
答案 0 :(得分:0)
您必须从子进程的stdout和stderr的InputStream中读取,或者将它们重定向到父进程的流:
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectOutput(Redirect.INHERIT);
builder.redirectError(Redirect.INHERIT);
builder.start();
请参阅此example