Подтвердить что ты не робот

Как открыть системный браузер по умолчанию из приложения java fx?

Я пытаюсь открыть веб-url в системном браузере по умолчанию из javafx. Я не нашел официальной документации. Любая подсказка?

EDIT: Я нашел учебник, но он не работает. Я использую MacOsX, и я попытался запустить

java.awt.Desktop.getDesktop().browse(new URI(url));

но я получаю HeadlessExcelption

4b9b3361

Ответ 1

Используйте hostServices.showDocument(location).

Попробуйте поместить следующий код в метод запуска приложения:

getHostServices().showDocument("http://www.yahoo.com");

Ответ 3

Другой вариант - использовать ProcessBuilder:

public static void openWebpage(String url) {
    try {
        new ProcessBuilder("x-www-browser", url).start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Вы можете использовать эту опцию, если Desktop.getDesktop().browse(uri) почему-то зависает без каких-либо ошибок.

Ответ 4

Это не может быть сделано, кажется, потому что эта функция не реализована: https://javafx-jira.kenai.com/browse/RT-210

Дело в том, что вы не сможете ничего запускать, что требует awt-stack и jfx в той же виртуальной машине. Решение - использовать отдельную JVM. Просто запустите отдельную виртуальную машину и примите команды при просмотре через сокет.

Это один из способов, другой способ - найти любой другой способ вызова браузера из java - это задача, не специфичная для javafx-2, но для java вообще.

Но разработчик добавил комментарий:

Энтони Петров добавил комментарий - 17 мая 2013 года 17:09 Обратите внимание, что FX8 позволяет головному AWT работать в той же виртуальной машине с FX. Поэтому AWT API должен работать.

Ответ 5

Вот script, который работает внутри контроллера сцены, когда активирована кнопка:

package sample;


import com.sun.deploy.uitoolkit.impl.fx.HostServicesFactory;
import com.sun.javafx.application.HostServicesDelegate;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.stage.Stage;

public class Controller extends Application {

    public void openBrowser(ActionEvent actionEvent) throws Exception {

        HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
        getHostServices().showDocument("http://www.yahoo.com");

    }

    @Override
    public void start(Stage primaryStage) throws Exception {

    }
}

Ответ 6

Попробуйте следующее:

try {
    Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
    e.printStackTrace();
} catch (URISyntaxException e) {
    e.printStackTrace();
}