Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ProcessBuilder执行自定义可执行文件_Java_Windows_Processbuilder - Fatal编程技术网

Java ProcessBuilder执行自定义可执行文件

Java ProcessBuilder执行自定义可执行文件,java,windows,processbuilder,Java,Windows,Processbuilder,好吧,我尝试了十几种不同的方法,但都没有成功。我想执行一个自定义exe并获取输出。它在命令提示下运行良好。我让“dir”正常工作,但不是custom.exe。代码如下: List<String> command = new ArrayList<String>(); command.add("cmd"); // Even removed these two lines command.add("/c"); // aka ha

好吧,我尝试了十几种不同的方法,但都没有成功。我想执行一个自定义exe并获取输出。它在命令提示下运行良好。我让“dir”正常工作,但不是custom.exe。代码如下:

  List<String> command = new ArrayList<String>();
  command.add("cmd");          // Even removed these two lines
  command.add("/c");           // aka hail mary coding.
  //command.add("dir");
  command.add("custom.exe");   // even tried "c://custom.exe"

  String line;
  Process p = new ProcessBuilder(command).start();
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
  while ((line = input.readLine()) != null) {
    System.out.println(line);
  }
  List<String> command = new ArrayList<String>();
  command.add(System.getenv("ProgramFiles(x86)") + "\\mydir\\custom.exe";

  String line;
  ProcessBuilder pb = new ProcessBuilder(command);
  pb.redirectErrorStream(true);
  Process p = pb.start();
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
  while ((line = input.readLine()) != null) {
    System.out.println(line);
  }
List命令=新建ArrayList();
command.add(“cmd”);//甚至删除了这两行
command.add(“/c”);//又名万岁玛丽编码。
//添加命令(“dir”);
command.add(“custom.exe”);//甚至尝试过“c://custom.exe”
弦线;
进程p=新的ProcessBuilder(命令).start();
BufferedReader输入=新的BufferedReader(新的InputStreamReader(p.getInputStream());
而((line=input.readLine())!=null){
系统输出打印项次(行);
}
我一点输出都没有。如果我把它放在一个批处理文件中,我就会得到输出。我感觉它与%PATH%有关。回到过去

编辑-->以使此自定义exe的输出出错,以便查看发生的情况,我有以下代码:

  List<String> command = new ArrayList<String>();
  command.add("cmd");          // Even removed these two lines
  command.add("/c");           // aka hail mary coding.
  //command.add("dir");
  command.add("custom.exe");   // even tried "c://custom.exe"

  String line;
  Process p = new ProcessBuilder(command).start();
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
  while ((line = input.readLine()) != null) {
    System.out.println(line);
  }
  List<String> command = new ArrayList<String>();
  command.add(System.getenv("ProgramFiles(x86)") + "\\mydir\\custom.exe";

  String line;
  ProcessBuilder pb = new ProcessBuilder(command);
  pb.redirectErrorStream(true);
  Process p = pb.start();
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
  while ((line = input.readLine()) != null) {
    System.out.println(line);
  }
List命令=新建ArrayList();
command.add(System.getenv(“ProgramFiles(x86)”)+“\\mydir\\custom.exe”;
弦线;
ProcessBuilder pb=新的ProcessBuilder(命令);
pb.重定向错误流(真);
进程p=pb.start();
BufferedReader输入=新的BufferedReader(新的InputStreamReader(p.getInputStream());
而((line=input.readLine())!=null){
系统输出打印项次(行);
}

而且它工作起来就像一个热的该死的东西。:)

你不需要线路

command.add("cmd");
command.add("/c");
这仅适用于批处理文件。我宁愿指定可执行文件的完整路径


也许输出在stderr上?尝试将
p.getInputStream()
替换为
p.getErrorStream()

使用cmd/c尝试实现什么?是否尝试仅将“custom.exe”放入命令中?您不应该需要“cmd/c”,因为Java会自动将流打开到子进程的stdin、stdout和stderr。尝试使用和不使用“custom.exe”命令。两个都没用。谢谢…正在进步。。。添加了两行:ProcessBuilder pb=新的ProcessBuilder(命令);pb.redirectErrorStream(真);——以及获取错误消息。。。这就是进步!