java中的错误处理
我使用ProcessBulider从java代码运行java中的错误处理,java,process,processbuilder,Java,Process,Processbuilder,我使用ProcessBulider从java代码运行.exe文件,下面给出了我编写的代码。.exe文件以Input.txt(位于同一目录中)作为输入,并在同一目录中提供3个输出文件 public void ExeternalFileProcessing() throws IOException, InterruptedException { String executableFileName = "I:/Rod/test.exe; ProcessBuilder process
.exe
文件,下面给出了我编写的代码。.exe
文件以Input.txt
(位于同一目录中)作为输入,并在同一目录中提供3个输出文件
public void ExeternalFileProcessing() throws IOException, InterruptedException {
String executableFileName = "I:/Rod/test.exe;
ProcessBuilder processBuilderObject=new ProcessBuilder(executableFileName,"Input.txt");
File absoluteDirectory = new File("I:/Rod");
processBuilderObject.directory(absoluteDirectory);
Process process = processBuilderObject.start();
process.waitFor();
}
通过调用ExeternalFileProcessing()
,此进程工作正常。现在我正在做验证过程,如果有任何崩溃/.exe文件没有运行,我应该得到错误消息我如何才能得到错误消息
注意:最好是简单的错误消息,如
运行成功/不运行成功
或简单的真/假
,这样我就可以在条件下继续剩余的进程。它是第三方的.exe还是您有权访问它的源代码?如果是这样,您可以使用基本的系统输出(例如控制台的couts)。
这些输出可以通过以下方式重定向到java应用程序:
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = "";
while ((line = br.readLine()) != null) {
if(line.equals("something")) {
// do something
}
}
br.close();
这就是我做这类事情的方式,总体来说效果很好。但我必须承认,我不能说这是解决问题的办法。更高级的方法可能是使用(参见清单4.5)来处理.exe的输出。
告诉我它是否对您有帮助。您可以添加异常处理程序以获取错误消息
public void externalFileProcessing() {
String executableFileName = "I:/Rod/test.exe";
ProcessBuilder processBuilderObject = new ProcessBuilder(
executableFileName, "Input.txt");
File absoluteDirectory = new File("I:/Rod");
processBuilderObject.directory(absoluteDirectory);
try {
Process process = processBuilderObject.start();
process.waitFor();
// this code will be executed if the process works
System.out.println("works");
} catch (IOException e) {
// this code will be executed if a IOException happens "e.getMessage()" will have an error
e.printStackTrace();
} catch (InterruptedException e) {
// this code will be executed if the thread is interrupted
e.printStackTrace();
}
}
但是最好在调用函数中处理它,方法是在调用函数中放置一个try-catch处理程序并在那里处理它