gpt4 book ai didi

java.lang.ProcessBuilder 抛出意外的 IOException

转载 作者:行者123 更新时间:2023-12-05 00:38:34 24 4
gpt4 key购买 nike

也许我有点天真,但我想这不应该是那样的。
首先是我的代码:

   private String ExeName="dc64cmd.exe";
private String Dir=System.getenv("ProgramFiles(x86)") +"\\12noon Display Changer\\";
private String DetachArgument = "-monitor=\"PnP-Monitor (Standard)\" -detach";
try {
System.out.println(new File(Dir+ExeName).exists());
//This prints "true" as expected.


ProcessBuilder pb = new ProcessBuilder(ExeName, DetachArgument);
pb=pb.directory(new File(Dir));

pb=pb.redirectError(ProcessBuilder.Redirect.INHERIT);
pb=pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
pb=pb.redirectInput(ProcessBuilder.Redirect.INHERIT);
//afaik the 3 lines above are not necessary. But just to be sure..

pb.start();
} catch (java.io.IOException IOexc) {
System.err.println(IOexc.toString());
}

程序的输出是

true
java.io.IOException: Cannot run program "dc64cmd.exe" (in directory "C:\Program Files (x86)\12noon Display Changer"): CreateProcess error=2, Das System kann die angegebene Datei nicht finden

最后一部分是“系统找不到文件”的德语本地化版本。

我不明白为什么一方面文件存在,另一方面却找不到。

我深入研究了 java.lang.ProcessBuilder,发现异常实际上是在第 189 行的 java.lang.ProcessImpl.java 中抛出的

handle = create(cmdstr, envblock, path,
stdHandles, redirectErrorStream);

此异常导致 java.lang.ProcessImpl.Start(...)(从第 83 行开始)在 try 语句的 finally 子句中关闭 FileInputStreams 和 FileOutputStreams。然而,在调试时我注意到 f2.close() (第 141 行)被调用了两次,导致抛出异常,然后将其解释为未知文件。

我的第一个猜测是错误,但我认为我的代码相当琐碎,不应引发未知错误。

更有可能是我一开始在我的代码中犯了一个愚蠢的小错误....

我希望你能看懂我糟糕的英语和糟糕的风格,我不习惯写代码...

感谢任何帮助。

jdk 1.7.0_03

编辑:我想运行的文件是 64 位可执行文件,尽管我将它安装在 x86 文件夹中,但可能很重要。

最佳答案

请试试

new ProcessBuilder(Dir+ExeName, 
"-monitor=\"PnP-Monitor (Standard)\"",
"-detach");

这将解决两件事:

  • 您为可执行文件使用了完整的限定名称。
  • 您的 detachArgument 实际上似乎是两个参数。

关于java.lang.ProcessBuilder 抛出意外的 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9859492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com