【发布时间】:2014-11-29 09:49:02
【问题描述】:
我已经查看了许多关于 Java 中衍生进程的输入/输出的问题,但我仍然无法弄清楚我的程序出了什么问题。它真的很短很简单,但它不起作用。我正在使用 Runtime 对象的 exec() 方法来创建新进程(我知道 ProcessBuilder 可能更好,但这是一个简单的分配,我真的不必担心生成进程的 stderr) .
我自己从 IDE/命令行运行“处理器”类。 Memory.java 在同一目录中。
public class Memory
{
public static void main(String[] args)
{
System.out.println("Memory works!");
}
}
还有其他程序:
import java.io.IOException;
import java.io.InputStream;
public class Processor
{
public static void main(String[] args)
{
Runtime rt = Runtime.getRuntime();
Process proc = null;
try {
proc = rt.exec("java Memory"); //execute Memory.java which is in same directory
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(2); //exit code 2 means that process creation failed.
}
//stream to get output from memory
InputStream fromProcess = proc.getInputStream();
int x;
try {
while((x = fromProcess.read()) != -1)
System.out.print((char)x);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
没有输出,程序永远不会终止。现在这可能是因为扫描器内存中的 while 循环,但至少应该有一些输出吧?
【问题讨论】:
-
“我真的不必担心衍生进程的标准错误”嗯...看看它:它肯定会告诉你出错了;-)
-
我建议您使用几个调试步骤来了解正在发生的事情。首先,请注意 stderr,因为它可能会指出您的问题。其次,尝试运行一些其他命令,您确定它将作为 ls 或 dir 命令输出到标准输出,具体取决于您正在工作的操作系统,如果您看到输出,这也可以告诉您正在使用哪个当前目录,这将是有帮助的只是为了确保我们处于正确的环境中。最后我只是为了检查,处理器类执行的当前目录中是否有编译好的 memory.class 文件?
-
我已经回滚了您的大量编辑...因为它们使当前的答案毫无用处。如果您的代码仍然存在问题,并且列出的其他建议(例如添加调试步骤),请提出一个单独的问题以缩小您遇到的新问题,并包括相关输出
标签: java process inputstream runtime.exec