0

我在目录ThMapInfratab1-2.exe下有一个文件C:\Users\Infratab Bangalore\Desktop\Rod。我以以下方式在命令提示符下执行。它工作正常。

 C:\Users\Infratab Bangalore\Desktop\Rod>ThMapInfratab1-2.exe TMapInput.txt

我想使用Java技术做同样的程序。使用StackOverFlow伙计们,我尝试了两种方式。

情况1:

使用getRuntime().

   import java.util.*;
   import java.io.*;
   public class ExeProcess
{
public static void main(String args[]) throws IOException
{
    Runtime rt = Runtime.getRuntime();
    File filePath=new File("C:/Users/Infratab Bangalore/Desktop/Rod");
    String[] argument1  = {"TMapInput.txt"};
    Process proc = rt.exec("ThMapInfratab1-2.exe", argument1, filePath);
}
}

案例二:

使用ProcessBuilder

 import java.io.File;
 import java.io.IOException;
 public class ProcessBuilderSample {

 public static void main(String args[]) throws IOException 
 {
  String executable = "ThMapInfratab1-2.exe";
  String argument1  = "TherInput.txt";
  File workingDirectory = new File("C:/Users/Infratab Bangalore/Desktop/Rod");

  ProcessBuilder pb = new ProcessBuilder(executable, argument1);
  pb.directory(workingDirectory);
  pb.start();     
 }
 }

在这两种情况下,我都会收到以下错误。

错误:

   Exception in thread "main" java.io.IOException: Cannot run program "ThMapInfratab1-2.exe" (in directory "C:\Users\Infratab Bangalore\Desktop\Rod"): CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at ProcessBuilderSample.main(ProcessBuilderSample.java:16)
  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>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 2 more

没搞清楚,有什么问题。任何人都可以建议我。

我正在使用jre 7.

谢谢

4

2 回答 2

5

尝试使用这个:

import java.io.File;
 import java.io.IOException;
 public class ProcessBuilderSample {

 public static void main(String args[]) throws IOException 
 {
  String executable = "ThMapInfratab1-2.exe";
  String argument1  = "TherInput.txt";
  File workingDirectory = new File("C:/Users/Infratab Bangalore/Desktop/Rod");

  ProcessBuilder pb = new ProcessBuilder("cmd", "/c","start" ,executable, argument1);
  pb.directory(workingDirectory);
  pb.start();     
 }
 }
于 2013-07-24T10:42:35.920 回答
1

该声明

pb.directory(workingDirectory);

仅指定工作目录。这不是ThMapInfratab1-2.exe要搜索可执行文件的目录。但它是TMapInput.txt要搜索您指定为参数的文件的目录。由于TMapInput.txt不是绝对路径,因此您的程序将相对于工作目录搜索该文件。

要解决您的问题,您需要指定可执行文件的完整路径:

String executable = "C:\\Users\\Infratab Bangalore\\Desktop\\Rod\\ThMapInfratab1-2.exe";
String argument1  = "TherInput.txt";
File workingDirectory = new File("C:\\Users\\Infratab Bangalore\\Desktop\\Rod");

或者,如果您不需要该位置C:\Users\Infratab Bangalore\Desktop\Rod ,只需传递文件的绝对路径并删除语句pb.directory(workingDirectory);

String executable = "C:\\Users\\Infratab Bangalore\\Desktop\\Rod\\ThMapInfratab1-2.exe";
String argument1  = "C:\\Users\\Infratab Bangalore\\Desktop\\Rod\\TherInput.txt";

或者,您可以扩展您的PATH环境变量以包含 location C:\Users\Infratab Bangalore\Desktop\Rod。在这种情况下,程序将在您发布时运行良好。

于 2013-07-24T11:22:45.473 回答