2012-06-30 46 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

不得不说,错误信息有点误导。它说它找不到你的可执行文件,然后它说'在目录中...',这意味着它就是它在寻找它的地方。