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

bleedin의 부서명은 분명합니다. 그러나 실제로 어디서나 "C : \ wamp \ www \ usercodes \ lokesh \ 19.exe"가 확실히 존재한다고 말한 것은 아닙니다. 그거야? –

+0

예. 그렇습니다. "지정한 경로에서 .exe 파일을 생성 할 수 있습니다."라고 말했고 확인을 위해 링크를 볼 수도 있습니다. –

답변

13

ProcessBuilder를의 directory 설정은 시스템이 실행 파일을 찾을 것이다 위치에 영향을주지 않습니다 프로세스를 시작합니다. 프로세스를 성공적으로 시작할 수 있으면 새로 생성 된 프로세스의 현재 작업 디렉토리를이 디렉토리로 설정합니다. 프로그램 19.exeC:\wamp\www\usercodes\lokesh에있을 수 있지만이 폴더가 PATH에 없으면 시스템에서 프로세스를 시작할 수 없습니다.

19.exe 대신 실행 파일의 전체 경로를 사용하여 프로세스를 실행 해보십시오.

오류 메시지가 다소 오도 된 것입니다. 그것은 당신의 실행 파일을 찾을 수 없다고 말했고, 그 다음에는 디렉토리에서 ...라고 말합니다. 이것은 그 디렉토리가 찾고 있던 곳이라는 것을 의미합니다.

관련 문제