it-swarm.com.ru

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

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

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

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

но я получаю HeadlessExcelption

25
Advanced

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

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

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

В дополнение к ответу jewelsea, если вы не знаете, как вызвать getHostServices (), попробуйте это в вашем основном классе:

HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
hostServices.showDocument(WEBSITE);

http://docs.Oracle.com/javafx/2/api/javafx/application/HostServices.html#showDocument(Java.lang.String)

14
ceklock

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

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

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

8
Eldelshell

Попробуй это:

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

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

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

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

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

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

2
Alexander Kirov

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

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 {

    }
}
0
rainer