Запустите файл с программой по умолчанию и дождитесь окончания редактирования - PullRequest
1 голос
/ 20 октября 2011

Я хочу открыть файл, загруженный с сервера программой по умолчанию, и подождать, пока редактирование не будет завершено (чтобы загрузить измененный файл на сервер). Я сделал это таким образом:

public void init() {
    try {
        int fileId = Integer.valueOf(this.getParameter("id"));
        System.out.println("Downloading");
        String filePath = downloadFile(fileId);
        String[] cmd = { "cmd.exe", "/C", "start /wait " + filePath };
        System.out.println("Opening");
        Process p = Runtime.getRuntime().exec(cmd);
        p.waitFor();
        System.out.println("Uploading");
        uploadFile(filePath, fileId, address, session);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

Это хорошо работает, за исключением случая, когда расширение файла не связано ни с одной программой. Диалоговое окно Windows для выбора программы и после того, как клиент сделал выбор, процесс выбора завершен, и файл немедленно загружается на сервер. Есть идеи как решить?

1 Ответ

0 голосов
/ 20 октября 2011

Проблема здесь в том, что если с расширением не связано приложение, возникает отдельный процесс, чтобы спросить пользователя, какое приложение использовать.К сожалению, с Java мало что можно сделать, если вы точно не знаете, какое приложение вызывать, вы не сможете отслеживать редактор файлов, если он не связан с файлом до запуска.

Этоэто функция ОС, и нет простого способа обойти это.В зависимости от типа файла вы можете «угадать», какое приложение будет использовать пользователь, и вызывать его напрямую вместо интерпретатора команд, но это очень рискованно и подвержено ошибкам.

...