Java上忽略了Java proc.waitfor()

Arp*_*dax 2 java macos netbeans process

我编写了一个在mac上运行的简单程序,程序打开一个excel文件并等待用户关闭文件,然后给出一个简单的输出.当我运行程序时,excel打开,proc.waitfor被忽略,它只是跳过输出而不等待,任何帮助谢谢

  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");
Run Code Online (Sandbox Code Playgroud)

Kaj*_*Kaj 6

这一行: System.out.println("excel is now closed");

应该在run方法里面.你的主线程,启动你的另一个线程的线程继续调用start之后的执行.

另一种选择是放置: myThread.join();

在线之后: myThread.start();


kha*_*hik 5

/usr/bin/open不以模态方式运行,它在启动适当的应用程序后返回控件.你应该用open -W.考虑使用open -W -n它在应用程序的新实例中打开文件.man open在测试java代码之前,请先咨询并尝试终端.