Java proc.waitfor () игнорируется на Mac - PullRequest
2 голосов
/ 29 мая 2011

Я написал простую программу для запуска на 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");

Ответы [ 3 ]

6 голосов
/ 29 мая 2011

Эта строка: System.out.println("excel is now closed");

Должна быть внутри метода run.Ваш основной поток, поток, который запускает ваш другой поток, продолжает выполнение после вызова start.

Другой альтернативой является размещение: myThread.join();

в строке после: myThread.start();

5 голосов
/ 29 мая 2011

/usr/bin/open не запускается модально, возвращает элемент управления после запуска соответствующего приложения. Вы должны использовать open -W. Попробуйте использовать open -W -n, который открывает файл в новом экземпляре приложения. Проконсультируйтесь с man open и попробуйте в терминале, прежде чем тестировать свой Java-код.

1 голос
/ 29 мая 2011

Вы делаете свой процесс (соответственно) в фоновом потоке, и какой эффект будет ждать для совершенно отдельного вызывающего потока? Ответ: нет. Решение, которое я вижу, было дано в другом ответе - +1 к нему. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...