2012-06-30 77 views
3

我正在製作一個項目,以從Java代碼本身運行C,C++和Java。它對於Java來說絕對正確,並且在編譯和執行C和C++文件時遇到了這個問題。無法使用ProcessBuilder從java執行exe文件

我得到了我的編譯權code,我可以得到在我指定的路徑中生成的可執行文件。但是現在,當我運行ProcessBuilder的可執行二進制文件時,出現錯誤,提示'文件未找到'。請參閱代碼並告訴我發生了什麼問題以及在哪裏?

public void processCode(String path,String lang)throws IOException 
    { 
     String cmd="",s=null,out=null,file=""; 
     totalTime=0; 
     ProcessBuilder process=new ProcessBuilder(); 
     process.directory(new File(path)); 
     if(lang.equals("c")||lang.equals("cpp")) 
     { 
      cmd=threadNum+".exe"; 
      process.command(cmd); 
     } 
     else if(lang.equals("java")) 
     { 
      cmd="java"; 
      file="Main"+threadNum; 
      process.command(new String[]{cmd,file}); 
     } 
     process.redirectInput(new File(PATH+"Input\\" + prob + ".txt")); 
     process.redirectOutput(new File(PATH+"Output.txt")); 
     Process p=process.start(); 
     long start=System.currentTimeMillis(); 
     while (true) 
     { 
      try{ 
        if(p.exitValue()==0) 
        { 
         totalTime=(int)(System.currentTimeMillis()-start); 
         break; 
        } 
       } 
       catch (Exception e) 
       { 

       } 
       if(System.currentTimeMillis()-start>2000) 
       { 
        res=1; 
        p.destroy(); 
        break; 
       } 
     } 
     if(res!=1) 
     { 
      compareFile(); 
     } 
    } 

的方法是從here 調用,生成該錯誤是:

Exception in thread "main" java.io.IOException: Cannot run program "19.exe" (in directory "C:\wamp\www\usercodes\lokesh"): CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
    at Contest.processCode(Main.java:202) 
    at Contest.compileCode(Main.java:180) 
    at Contest.makeFile(Main.java:157) 
    at Contest.main(Main.java:53) 
    at Main.main(Main.java:15) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:188) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:132) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021) 
    ... 10 more 
+1

流血部門'在這裏很明顯,但你實際上並沒有說你檢查過的任何地方,並且肯定存在「C:\ wamp \ www \ usercodes \ lokesh \ 19.exe」。可以? –

+0

是的,它確實..我提到它「我可以得到在我指定的路徑生成的.exe文件」,你也可以看到鏈接來確認它 –

回答

13

設置一個的ProcessBuilder的directory不會對其中系統將尋找可執行任何影響它嘗試時開始一個過程。它只是將新創建的進程的當前工作目錄設置爲該目錄,是否能夠成功啓動進程。您的程序19.exe可能存在於C:\wamp\www\usercodes\lokesh中,但除非此文件夾位於PATH上,否則系統將無法啓動您的過程。

嘗試運行使用可執行文件的完整路徑而不僅僅是19.exe

不得不說,錯誤信息有點誤導。它說它找不到你的可執行文件,然後它說'在目錄中...',這意味着它就是它在尋找它的地方。