2010-08-03 57 views
0
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();  
    }  
}  

java代码我已经修改了这种方式...但出现下列错误,请澄清这个问题在下面

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

如果在每行代码之前添加四个空格,StackOverflow将很好地格式化它。 – StriplingWarrior 2010-08-03 17:44:34

+0

谢谢Michael Mrozek ...... !!! – LGAP 2010-08-03 18:15:46

+0

'child'不在范围内,扩展'catch',将你的代码与我答案中的代码进行比较。 – OscarRyz 2010-08-03 19:04:54

回答

8

你确实会忽略返回Processstdoutstderr流通过Runtime#exec()

这将是一个漫长的故事,所以这里只是一个链接:When Runtime.exec won't。阅读所有四页。

+0

感谢BalusC的链接! – peakit 2010-08-03 18:05:44

+0

谢谢:)无论如何我无法达成解决方案.. :( – LGAP 2010-08-03 18:16:18

+0

这很快,你读过所有的4页?你有什么目前和现在会发生什么? – BalusC 2010-08-03 18:29:37

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

孩子是宣布try ... catch块内部,其范围是局部的该块。您正尝试在该块之外访问它。您应该在块之前声明它,如

Process child; 
try { 
// code 
child = Runtime.getRuntime().exec(command); 
// code 
} 
catch(/*blah blah*/) {} 
// more code