【问题标题】:Not able to execute an exe file from java using ProcessBuilder无法使用 ProcessBuilder 从 java 执行 exe 文件
【发布时间】:2012-06-30 18:05:44
【问题描述】:

我正在制作一个项目来从 Java 代码本身运行 C、C++ 和 Java。它在 Java 上工作得非常好,在编译和执行 C 和 C++ 文件时会遇到问题。

我用这个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

【问题讨论】:

  • 部门这里的出血很明显,但是您实际上并没有说过您检查过的任何地方,并且“C:\ wamp \ www \ usercodes \ lokesh \ 19.exe”肯定存在。是吗?
  • 是的..我提到“我可以得到我指定路径中生成的.exe文件”,你也可以看到链接来确认它

标签: java process processbuilder


【解决方案1】:

设置 ProcessBuilder 的 directory 对系统在尝试启动进程时将在何处查找可执行文件没有任何影响。它只是将新创建的进程的当前工作目录设置为这个目录,它应该能够成功启动一个进程。您的程序19.exe 很可能存在于C:\wamp\www\usercodes\lokesh 中,但除非此文件夹在PATH 上,否则系统将无法启动您的进程。

尝试使用可执行文件的完整路径而不是 19.exe 来运行进程。

不得不说,错误信息有些误导。它说它找不到您的可执行文件,然后它说“在目录中...”,这意味着它正在寻找它。

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多