2010-08-03 55 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