Java proc.waitfor()在mac上被忽略



我编写了一个在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给他

相关内容

  • 没有找到相关文章