2013-12-07 46 views
0

大家Java進程生成器在成功啓動外部進程後返回null

我有以下問題。我想使用Java進程構建器來啓動外部應用程序(基於Qt的win32可執行文件,如果它有任何重要性的話)。啓動外部應用程序很有效。應用程序按預期啓動。這部分工作正常。除了啓動外部應用程序之外,我還希望跟蹤實例,以便能夠「銷燬」退出Java應用程序時仍在運行的任何實例。

當我開始我的應用程序執行以下操作:

ExternalTaskTracking externalProcessList = new ExternalTaskTracking(); 

... 

ProcessBuilder pb = new ProcessBuilder(arguments); 
Process newProcess=pb.start(); 
externalProcessList.addProcess(newProcess); 

... 

ExternalTaskTracking是簡單的Java類我使用(這是我打算使用)來跟蹤過程。

public class ExternalTaskTracking { 
protected ArrayList<Process> processList; 
protected Integer processCount; 

public ExternalTaskTracking(){ 
    super(); 
    processCount=0; 
} 

public void addProcess(Process uProcess){ 
    processCount++; 
    processList.add(uProcess); 
    //processList.set(processCount, uProcess); 

}//end addProcess(Integer uProcess) 

public Boolean killProcess(Process uProcess){ 
    Integer index=processList.indexOf(uProcess); 
    if (index==-1){ 
     return false; 
    }//end if 
    try{ 
     uProcess.destroy(); 
     processList.remove(index); 
     processCount--; 
     return true; 
    }catch (Exception ex){ 
     logger.error(ex.toString()); 
     return false; 
    }//end try-catch 
}//end killProcess(Process uProcess) 

public void killAll(){ 
    for (Integer i=0;i<processCount;i++){ 
     try{ 
      Process p=processList.get(i); 
      if (p!=null){ 
       p.destroy(); 
      }else{ 
       logger.error("killAll()->Null process?!?"); 
      }//end if 
     }catch (Exception ex){     
      logger.error(ex.toString()); 
     }//end try-cath 
    }//end for 
}//end killAll() 
}//end class 

問題是,pb.start() rezult是總是null,而外部應用程序成功啓動,所以我不能維持進程列表。任何想法我做錯了什麼?

回答

0

您還沒有初始化processList。

public ExternalTaskTracking(){ 
    super(); 
    processList = new ArrayList<Process>(); 
    processCount=0; 
} 
+0

是的,這是問題。我深信'pb.start()'返回'null'是我沒有檢查到明顯的錯誤。 –

+0

您認爲我的回答是正確的,請標記爲正確。 – 4J41

+0

我將其標記爲正確。然而,由於我的聲望<15(作爲「全新」用戶),我無法投票回答, –