3

私は、Javaコード自体の中から、C、C ++、およびJavaを実行するプロジェクトを作成しています。これはJavaで完全に正常に機能し、CおよびC++ファイルをコンパイルおよび実行するときに問題が発生します。

このコードでコンパイルを正しく行い、指定したパスで生成された実行可能ファイルを取得できます。しかし、実行可能バイナリをから実行する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();
        }
    }

メソッドはここから呼び出され 、生成されるエラーは次のとおりです。

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
4

1 に答える 1

14

ProcessBuilder の を設定しdirectoryても、システムがプロセスを開始しようとしたときに実行可能ファイルを探す場所には影響しません。プロセスを正常に起動できる場合、新しく作成されたプロセスの現在の作業ディレクトリをこのディレクトリに設定するだけです。プログラム19.exeは に存在する可能性がありC:\wamp\www\usercodes\lokeshますが、このフォルダーが PATH にない場合、システムはプロセスを開始できません。

だけではなく、実行可能ファイルの完全なパスを使用してプロセスを実行してみてください19.exe

エラーメッセージはやや誤解を招くものであると言わざるを得ません。実行可能ファイルが見つからなかったと表示され、「ディレクトリ内...」と表示されます。これは、それが探していた場所であることを意味します。

于 2012-06-30T20:31:41.473 に答える