Javafx getHostServices().showDocuments() вызывает Chrome вместо браузера по умолчанию (Linux)

Я пытаюсь отобразить html-документ из приложения JavaFX. Поэтому я позвонил getHostServices().showDocument(filename);

Но вместо того, чтобы показывать документ в браузере Firefox по умолчанию, система запускает Chrome и отображает в нем файл. Chrome даже предлагает «Google Chrome не является вашим браузером по умолчанию» и показывает большую кнопку «Установить по умолчанию».

Как я могу убедиться, что документ отображается в браузере по умолчанию?

Я использую Ubuntu 22.04, Firefox 125.0, Chrome 124.0.6367.60, openjdk 11.0.22, javafx-sdk-11.0.2 (от gluon)

Похоже, что реализация 🔁 просто возвращает первый браузер b в жестко запрограммированном списке, для которого выполнение "which "+b имеет непустой возврат. Вы могли бы достаточно легко переопределить это непосредственно для платформ, отличных от Windows или Mac, хотя это немного неудовлетворительное решение. Что делает выполнение xdg-open url из командной строки (замена url фактическим URL-адресом, который вы открываете)?

James_D 23.04.2024 18:51

@James_D Спасибо за информацию. xdg-open запускает Firefox.

Guangliang 23.04.2024 19:20

Я посмотрел код. Список браузеров начинается с xdg-open. Почему не запустился Firefox? Странный.

Guangliang 23.04.2024 20:44

Этот код запускает браузер по умолчанию Firefox: Runtime.getRuntime().exec(new String[]{"xdg-open", filename});

Guangliang 23.04.2024 20:55

Возможно, приложение работает под другим пользователем или с другой установленной переменной пути (или, возможно, какой-либо другой переменной среды)? Хотя я не знаю, я просто предполагаю на данный момент. То, что вы описываете, трудно объяснить.

James_D 23.04.2024 21:07

Я понял. Источник, на который вы указали, был более новой версией. Я использую jfx 11.0.2. В этом источнике в списке браузеров нет xdg-open. Это просто {"google-chrome", "firefox", "opera", "konqueror", "mozilla"}

Guangliang 23.04.2024 21:49

Вы можете опубликовать ответ на свой вопрос

James_D 24.04.2024 10:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
7
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно исходному коду, поведение HostServices.showDocument() в Linux заключается в простом выполнении списка команд для открытия аргумента URL. В версии javafx-sdk-11.0.2 (скачанной с gluonhq) список выглядит следующим образом: {"google-chrome", "firefox", "opera", "konqueror", "mozilla"}, поэтому Google Chrome открывается файл независимо от того, какой браузер используется по умолчанию в Linux.

В более поздней версии javafx (указанной James_D) команда «xdg-open» добавляется в качестве первого элемента списка. Это должно привести к ожидаемому поведению метода showDocument. Хотя мне еще предстоит это проверить.

Другие вопросы по теме