Java 如何在运行.exe文件时修复问题

Java 如何在运行.exe文件时修复问题,java,processbuilder,Java,Processbuilder,我在C:\Users\Infratab Bangalore\Desktop\Rod目录下有一个ThMapInfratab1-2.exe文件。我在命令提示符中以以下方式执行。它运行良好 C:\Users\Infratab Bangalore\Desktop\Rod>ThMapInfratab1-2.exe TMapInput.txt 我想使用Java技术执行相同的过程。通过使用StackOverFlow,我尝试了两种方法 案例1: 使用getRuntime() 案例2: 使用Proces

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

 C:\Users\Infratab Bangalore\Desktop\Rod>ThMapInfratab1-2.exe TMapInput.txt
我想使用
Java
技术执行相同的过程。通过使用StackOverFlow,我尝试了两种方法

案例1:

使用
getRuntime()

案例2:

使用
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
线程“main”java.io.IOException中的异常:无法运行程序“ThMapInfratab1-2.exe”(在目录“C:\Users\Infratab Bangalore\Desktop\Rod”中):CreateProcess error=2,系统找不到指定的文件 位于java.lang.ProcessBuilder.start(未知源) 在ProcessBuilderSample.main(ProcessBuilderSample.java:16) 原因:java.io.IOException:CreateProcess error=2,系统找不到指定的文件 在java.lang.ProcessImpl.create(本机方法) 位于java.lang.ProcessImpl。(未知源) 位于java.lang.ProcessImpl.start(未知源) ... 还有两个 我不知道,有什么问题。有人能推荐我吗

我正在使用jre 7

谢谢

试着用这个:

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();     
 }
 }
尝试使用以下方法:

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();     
 }
 }
声明

pb.directory(workingDirectory);
仅指定工作目录。这不是要搜索可执行文件
ThMapInfratab1-2.exe
的目录。但它是您指定为argument
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)

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

语句

pb.directory(workingDirectory);
仅指定工作目录。这不是要搜索可执行文件
ThMapInfratab1-2.exe
的目录。但它是您指定为argument
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)


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

可能是您的路径有误?@PhilippSander我也尝试了以下方法。1. <代码>C:\\Users\\Infratab班加罗尔\\桌面\\Rod
和2
C://Users//Infratab班加罗尔//Desktop//Rod
hmmm听起来像是权限问题。你在用什么操作系统?@PhilippSander我在用
windows7
@PhilippSander我把
Rod
文件夹放在
E
目录下。我在代码中更改了文件路径,但它仍然不起作用。我尝试了案例1的
notepad.exe
,它工作正常。案例2不起作用。我在
C:/Program Files/Putty
下安装了Putty.exe。我在案例1中尝试了
putty.exe
。这也不起作用。我认为只有inbuild
.exe
文件才能工作。可能是你的路径输入错误?@PhilippSander我也尝试了以下方法。1. <代码>C:\\Users\\Infratab班加罗尔\\桌面\\Rod
和2
C://Users//Infratab班加罗尔//Desktop//Rod
hmmm听起来像是权限问题。你在用什么操作系统?@PhilippSander我在用
windows7
@PhilippSander我把
Rod
文件夹放在
E
目录下。我在代码中更改了文件路径,但它仍然不起作用。我尝试了案例1的
notepad.exe
,它工作正常。案例2不起作用。我在
C:/Program Files/Putty
下安装了Putty.exe。我在案例1中尝试了
putty.exe
。这也不起作用。我认为只有inbuild
.exe
文件才能工作。谢谢你的回答,它工作得很好。你能解释一下下面语句的前3个参数吗<代码>ProcessBuilder pb=新的ProcessBuilder(“cmd”、“/c”、“start”、可执行文件、argument1)见此:对于“开始”,我认为它只是程序标题,您可以更改它。感谢您的回答,它工作得很好。你能解释一下下面语句的前3个参数吗<代码>ProcessBuilder pb=新的ProcessBuilder(“cmd”、“/c”、“start”、可执行文件、argument1)见此:对于“开始”,我认为它只是程序标题,您可以更改它。感谢您的回答,我不想传递任何参数,因为我的
.exe
文件自动执行。为此,我尝试了以下代码。我还有一个疑问,我不想通过任何争论。所以我写了下面的代码。它不工作,因为我没有使用
pb.directory(workingDirectory)我的代码:
public static void main(String args[])抛出IOException{String executable=“C:/Users/Infratab Bangalore/Desktop/Rod/ThMapInfratab1-2.exe”;//String argument1=“TherInput.txt”;//File workingDirectory=新文件(“C:/Users/Infratab Bangalore/Desktop/Rod”);ProcessBuilder pb=新ProcessBuilder(可执行);//pb.directory(workingDirectory);pb.start();}
强制我们需要提到
目录()
@urt