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
bleedin의 부서명은 분명합니다. 그러나 실제로 어디서나 "C : \ wamp \ www \ usercodes \ lokesh \ 19.exe"가 확실히 존재한다고 말한 것은 아닙니다. 그거야? –
예. 그렇습니다. "지정한 경로에서 .exe 파일을 생성 할 수 있습니다."라고 말했고 확인을 위해 링크를 볼 수도 있습니다. –