我编写了一个在mac上运行的简单程序,该程序打开一个excel文件,等待用户关闭该文件,然后给出一个简单的输出。当我运行程序时,excel打开,proc.waifor被忽略,它只是跳过到输出而不等待,没有任何帮助感谢
Thread myThread = new Thread() {
@Override
public void run() {
try {
String userDir = (System.getProperty("user.home"));
String fileName = userDir + "/Desktop/test/testfile.xlsx";
File theFile = new File(fileName);
Process proc = new ProcessBuilder("/usr/bin/open", fileName).start();
int waitFor = proc.waitFor();
} catch (InterruptedException ex) {
Logger.getLogger(MacTester.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(MacTester.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
myThread.start();
System.out.println("excel is now closed");
此行:System.out.println("excel is now closed");
应该在run方法内部。您的主线程,即启动另一个线程的线程,在调用start后继续执行。
另一种选择是放置:myThread.join();
在以下时间之后的线路上:myThread.start();
/usr/bin/open
不以模式运行,它在启动适当的应用程序后返回控件。您应该使用open -W
。考虑使用open -W -n
,它在应用程序的新实例中打开文件。在测试java代码之前,请参阅man open
并在终端中进行尝试。
您在后台线程中(适当地)执行进程,那么等待对完全独立的调用线程有什么影响?答案:没有。我看到的答案已经在另一个答案中给出了——+1给他