【问题标题】:Java runtime's .exec() wont open executableJava 运行时 .exec() 不会打开可执行文件
【发布时间】:2014-08-15 20:57:07
【问题描述】:

我正在尝试使用运行时和进程执行另一个文件

try
{
Runtime run =   Runtime.getRuntime();
Process pro =   run.exec("C:\\Users\\user\\Desktop\\file.exe");

}
catch(Exception a)
{
    a.printStackTrace();
}

我可以在 run 或 cmd 中输入此命令,并且能够打开文件,但通过我的程序运行它不会打开。没有错误,就是打不开。

【问题讨论】:

  • 如果没有错误,那么它可能会运行 - 你怎么知道它没有?
  • 我尝试了多个文件
  • 用 Throwable 代替 Exception 看看有没有抛出异常
  • @M.Sharma exec 只抛出异常。

标签: java


【解决方案1】:

试试这个,创建一个批处理文件,比如 start_file.bat。 内容如下:

cd C:\Users\user\Desktop ----- Goto this directory
C:   ----- This line is very important
file.exe

这两种方法都运作良好。

  Runtime r  = Runtime.getRuntime();
  String []cmdarray = new String[4];
  cmdarray[0] = "cmd";
  cmdarray[1] = "/c";
  cmdarray[2] = "start";
  cmdarray[3] = "C:/users/desktop/start_file.bat";
  r.exec(cmdarray);

还有这个:

  r.exec("C:/users/desktop/start_file.bat");
  You can read the output from this new process.

【讨论】:

  • 也许,windows 知道程序启动的位置。根路径有很多假设,比如环境变量,os可以在哪里找到相关的dll..
【解决方案2】:

试试这个方法:

  String []cmdarray = new String[4];
  cmdarray[0] = "cmd";
  cmdarray[1] = "/c";
  cmdarray[2] = "start";
  cmdarray[3] = "C:\\Users\\user\\Desktop\\file.exe";
  Runtime.getRuntime().exec(cmdarray);

【讨论】:

    【解决方案3】:

    为了更好地了解正在发生的事情(这实际上是 Process 类的要求),您需要重定向流程的输入和错误流 - 并且推荐使用 ProcessBuilder 来启动流程:

    public static void main(String[] args) throws Exception {
        ProcessBuilder pb = new ProcessBuilder("C:\\Users\\user\\Desktop\\file.exe");
        runProcess(pb)
    }
    
    private static void runProcess(ProcessBuilder pb) throws IOException {
        pb.redirectErrorStream(true);
        Process p = pb.start();
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }
    

    【讨论】:

    • 没有打印任何东西,这是否表明它没有正确读取文件?
    • @joe 正在读取什么文件? file.exe 应该做什么?从命令行运行 C:\Users\user\Desktop\file.exe 会发生什么?
    • 它启动一个视频游戏,从命令行启动正常工作。
    • 但我尝试了多个文件。从代码中启动像“记事本”这样的普通文件可以正常工作
    • 您可以在调用pb.start();之前使用pb.directory(new File("c:\\Users\\user\\Desktop");设置工作目录。
    【解决方案4】:

    你必须这样做

    Process pro =   run.exec("C:\\Users\\user\\Desktop\\file.exe",null,"C:\\Users\\user\\Desktop\\");
    

    请看Run .exe file from Java from file location

    【讨论】:

    • 第三个实际参数是一个文件,在你链接的那个例子中演示了,我跟着这个,它仍然不会打开。
    • 进程 pro = run.exec("C:\\Users\\user\\Desktop\\file.exe",null,new File("C:\\Users\\user\\桌面"));
    猜你喜欢
    • 2014-11-10
    • 2019-06-02
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    相关资源
    最近更新 更多