2

所以我有这个程序

    String[] cmd = {"gnome-terminal", "--full-screen", "-e", "./toMatrix"};
    Process p = Runtime.getRuntime().exec(cmd);
    copy(p.getInputStream(), System.out);
    p.waitFor();  
    System.out.println("Exit value = " + p.exitValue());

我希望它在另一个进程中运行 C 程序 toMatrix。但我需要它在新的终端窗口和全屏模式下运行,所以我需要传递这些参数。问题是主进程没有等待进程 p 结束。我究竟做错了什么?

问候

4

2 回答 2

5

如果没有抛出异常,Java 正在等待进程结束。该过程可能在未完成手头任务的情况下结束。您可能需要读取进程的输出并显示它以找出问题所在。

看看这篇关于使用 Runtime.exec() 的文章: http ://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

希望对您调试问题有所帮助。

于 2012-12-18T18:01:07.087 回答
3

waitFor() 方法将使调用线程等待直到进程 p 完成(这可能很危险,因为如果进程在任何无限循环中被阻塞,主线程将一直等待。

我建议编写一些信号量文件,并在您的进程从java文件完成时在其中设置一些值。主要方法可以等待检查信号量文件的状态。

于 2012-12-18T18:04:38.950 回答