Desktop.open () молча завершается ошибкой на некоторых JRE

Я пытаюсь использовать Desktop класс, чтобы открыть локальный файл HTML в Windows. Но это работает только для некоторых конкретных JRE, а не для некоторых других JRE. Вот мой код:

try {
    if (Desktop.isDesktopSupported()) {
        Desktop desktop = Desktop.getDesktop();
        if (desktop.isSupported(Desktop.Action.OPEN)) {
            desktop.open(new File("test.html"));
        } else {
            throw new Exception("OPEN action not supported");
        }
    } else {
        throw new Exception("Desktop not supported");
    }
} catch (Exception e) {
    e.printStackTrace();
}

Когда это не работает, исключение не выдается, и текст не печатается в STDERR.

Работает с:

  • JRE 1.6.0_14 (32 бита)
  • JRE 1.7.0_05 (32 бита)
  • JRE 1.7.0_45 (64 бита)
  • JRE 1.7.0_51 (64 бита)

Он не работает с:

  • JRE 1.6.0_26 (64 бита)
  • JRE 1.6.0_37 (64 бита)
  • JRE 1.7.0_02 (64 бита)
  • JRE 1.7.0_21 (64 бита) РЕДАКТИРОВАТЬ: Но работает на CentOS

Все тесты были выполнены на одном и том же 64-битном боксе Win7.

РЕДАКТИРОВАНИЕ: та же проблема при попытке открыть файл "txt" или "pdf"

Спасибо.

7 голосов | спросил xav 15 MaramSat, 15 Mar 2014 05:05:57 +04002014-03-15T05:05:57+04:0005 2014, 05:05:57

2 ответа


0

Как сказал "Stijn de Witt" в комментариях ответа "haventchecked" , решение основано на Runtime.getRuntime() не работает с путями UNC и путями, содержащими последовательные пробелы. Вот решение, которое также работает с этими специальными путями:

new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", path).start();
ответил xav 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 25 Sep 2016 06:14:46 +0300 2016, 06:14:46
0

Эта проблема существует уже давно и была задокументирована с помощью нескольких решений в этом блоге.

Я прибегнул к использованию приведенного ниже кода, и он был надежным на каждой машине с Windows, которую я использовал, независимо от JRE. Извините, но я не знаю всех JRE, с которыми я тестировал.

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + path);
ответил haventchecked 15 MaramSat, 15 Mar 2014 05:48:25 +04002014-03-15T05:48:25+04:0005 2014, 05:48:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132