2014-09-22 11 views
5
import java.io.*; 
class Sysexecute 
{ 
    public static void main(String args[]) throws IOException,InterruptedException,IllegalThreadStateException 
    { 
     Runtime rt= Runtime.getRuntime(); 
     Process p=rt.exec("ls"); 
     System.out.println(p.exitValue()); 
    } 
} 

stavo imparando come eseguire i comandi di sistema in java e si è verificato questo errore. Ho provato a usare i lanci per negarlo ma non serviva. spiegare il motivo e la soluzioneGestione di IllegalThreadStateException

actual error:- 
Exception in thread "main" java.lang.IllegalThreadStateException: process hasn't exited 
    at java.lang.UNIXProcess.exitValue(UNIXProcess.java:270) 
    at Sysexecute.main(Sysexecute.java:8) 

risposta

9

Invoke Process#waitFor() prima di cercare di ottenere il valore di uscita. Ciò blocca il thread corrente fino alla fine del processo spawn. Se non si esegue questa operazione, Process#exitValue() tiri

IllegalThreadStateException - non se la sottoprocesso rappresentata dall'oggetto Process ha ancora terminato