import java.lang.Process;
import java.io.*;
import java.io.InputStream;
import java.io.IOException;
public class prgms{
public static void main(String[] args) {
try {
// Execute a command without arguments
String command = "java JavaSimpleDateFormatExample";
Process child = Runtime.getRuntime().exec(command);
// Execute a command with an argument
// command = "java JavaStringBufferAppendExample";
//child = Runtime.getRuntime().exec(command);
} catch (IOException e) {
}
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
process((char)c);
}
in.close();
}
}
我已经修改过这种方式......但是会发生以下错误,
prgms.java:17: cannot find symbol
symbol : variable child
location: class prgms
InputStream in = child.getInputStream();
^
prgms.java:20: cannot find symbol
symbol : method process(char)
location: class prgms
process((char)c);
^
2 errors
答案 0 :(得分:8)
您确实忽略了stdout返回的stderr的Process
和Runtime#exec()
个流。
这将是一个很长的故事,所以这里只是一个链接:When Runtime.exec won't。阅读所有四页。
答案 1 :(得分:4)
该代码没有问题。
做什么,就是在里面执行另一个Java程序。
类Process
有一个获取程序输出的方法,如果要查看结果,则必须将该输出重定向到您自己的输出。
这是使用Runtime.exec的“现代”替代品
的示例// Hello.java says Hello to the argument received.
class Hello {
public static void main ( String [] args ) {
System.out.println( "Hello, "+args[ 0 ] );
}
}
// CallHello.java
// Invokes Hello from within this java program
// passing "world" as argument.
import java.io.InputStream;
import java.io.IOException;
public class CallHello {
public static void main( String [] args ) throws IOException {
Process child = new ProcessBuilder("java", "Hello", "world").start();
// read byte by byte the output of that progam.
InputStream in = child.getInputStream();
int c = 0;
while( ( c = in.read() ) != -1 ) {
// and print it
System.out.print( (char)c);
}
}
}
输出:
Hello world
答案 2 :(得分:2)
Child在try ... catch块中声明,因此它的作用域是该块的本地。你试图在街区之外访问它。你应该在块之前声明它,比如
Process child;
try {
// code
child = Runtime.getRuntime().exec(command);
// code
}
catch(/*blah blah*/) {}
// more code