Trong chương trình Java của tôi, tôi tạo ra một quá trình thực thi một lệnh để chạy một tập tin thực thi như thế này:Thực thi một lệnh từ Java và Waiting for the Command để thúc
try {
File tempFile = new File("C:/Users/Public/temp.cmd");
tempFile.createNewFile();
tempFile.deleteOnExit();
setContents(tempFile, recipe.getText()); //Writes some user input to file
String cmd = "cmd /c start " + tempFile.getPath();
Process p = Runtime.getRuntime().exec(cmd);
int exitVal = p.waitFor();
refreshActionPerformed(evt);
} catch (InterruptedException ex) {
Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
Bây giờ, những gì tôi muốn đã xảy ra là lệnh
refreshActionPerformed(evt);
chỉ chạy sau tập tin thực thi mà tôi gọi đã thực hiện xong. Nhưng ngay bây giờ, nó chạy ngay sau khi Command Prompt mở ra.
Làm cách nào để khắc phục sự cố này?
Hãy chắc chắn đọc và thực hiện * tất cả * lời khuyên của [Khi Runtime.exec() sẽ không] (http://www.javaworld.com/javaworld/jw-12-2000/jw- 1229-traps.html). Nếu không, bạn gần như chắc chắn sẽ trải nghiệm "sẽ không". Ngoài ra, hãy xem xét sử dụng 'ProcessBuilder' cho 1,5+ và chuyển các đối số dưới dạng mảng. –
Tôi đọc Khi Runtime.exec() sẽ không, nhưng thẳng thắn, tôi hoàn toàn mới với lập trình Java và tôi không có ý tưởng làm thế nào để thực hiện lời khuyên của bài viết đó. –