ProcessBuilder 最后执行
ProcessBuilder is executing last
我有一段代码是这样的
File f = new File("Audio/Testing/mbgitr.wav");
try {
ProcessBuilder pb = new ProcessBuilder("bash/extractAudio.sh", f.getAbsolutePath());
pb.inheritIO();
pb.start();
}catch(IOException e){
System.out.println("Oh no!");
}
System.out.println(new File("Audio/mbgitr.wav").exists());
bash 文件将音频文件转换为不同的 format/sample 速率并将其输出到文件夹 Audio。但是每当我 运行 这个脚本时,我都会得到以下输出:
/home/Ryan/Development/Java/Test/Audio/Testing/mbgitr.wav
mbgitr.wav
/home/Ryan/Development/Java/Test
false
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
[more ffmpeg output]
Process finished with exit code 0
似乎测试文件是否存在的代码行在代码 运行ning 脚本之前执行。如果我再次 运行 程序,它会输出 "true" 因为文件已经在上一次迭代中创建。有没有办法让ProcessBuilder调用的文件先执行?提前致谢!
我不知道为什么 ProcessBuilder 会这样做,但这是一个解决方案。行
pb.start();
将return一个Process对象,所以如果那一行被下面两行替换
Process p = pb.start();
p.waitFor();
程序将暂停,直到进程完成执行
'
注意:这必须被 try/catch 块包围,因为 p.waitFor() 会抛出 InterruptedException
ProcessBuilder.start() 将进程作为一个单独的Process启动,并继续执行。如果您需要等到该进程终止,请修改代码,如下所示。然后你会得到想要的输出。
File f = new File("Audio/Testing/mbgitr.wav");
try {
ProcessBuilder pb = new ProcessBuilder("bash/extractAudio.sh", f.getAbsolutePath());
pb.inheritIO();
Process p = pb.start(); // Get the process
p.waitFor(); // Wait until it terminates
}catch(IOException e){
System.out.println("Oh no!");
}catch(InterruptedException e){
System.out.println("InterruptedException");
}
System.out.println(new File("Audio/mbgitr.wav").exists());
我有一段代码是这样的
File f = new File("Audio/Testing/mbgitr.wav");
try {
ProcessBuilder pb = new ProcessBuilder("bash/extractAudio.sh", f.getAbsolutePath());
pb.inheritIO();
pb.start();
}catch(IOException e){
System.out.println("Oh no!");
}
System.out.println(new File("Audio/mbgitr.wav").exists());
bash 文件将音频文件转换为不同的 format/sample 速率并将其输出到文件夹 Audio。但是每当我 运行 这个脚本时,我都会得到以下输出:
/home/Ryan/Development/Java/Test/Audio/Testing/mbgitr.wav
mbgitr.wav
/home/Ryan/Development/Java/Test
false
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
[more ffmpeg output]
Process finished with exit code 0
似乎测试文件是否存在的代码行在代码 运行ning 脚本之前执行。如果我再次 运行 程序,它会输出 "true" 因为文件已经在上一次迭代中创建。有没有办法让ProcessBuilder调用的文件先执行?提前致谢!
我不知道为什么 ProcessBuilder 会这样做,但这是一个解决方案。行
pb.start();
将return一个Process对象,所以如果那一行被下面两行替换
Process p = pb.start();
p.waitFor();
程序将暂停,直到进程完成执行 '
注意:这必须被 try/catch 块包围,因为 p.waitFor() 会抛出 InterruptedException
ProcessBuilder.start() 将进程作为一个单独的Process启动,并继续执行。如果您需要等到该进程终止,请修改代码,如下所示。然后你会得到想要的输出。
File f = new File("Audio/Testing/mbgitr.wav");
try {
ProcessBuilder pb = new ProcessBuilder("bash/extractAudio.sh", f.getAbsolutePath());
pb.inheritIO();
Process p = pb.start(); // Get the process
p.waitFor(); // Wait until it terminates
}catch(IOException e){
System.out.println("Oh no!");
}catch(InterruptedException e){
System.out.println("InterruptedException");
}
System.out.println(new File("Audio/mbgitr.wav").exists());