Ответ 1
Используйте hostServices.showDocument(location).
Попробуйте поместить следующий код в метод запуска приложения:
getHostServices().showDocument("http://www.yahoo.com");
Я пытаюсь открыть веб-url в системном браузере по умолчанию из javafx. Я не нашел официальной документации. Любая подсказка?
EDIT: Я нашел учебник, но он не работает. Я использую MacOsX, и я попытался запустить
java.awt.Desktop.getDesktop().browse(new URI(url));
но я получаю HeadlessExcelption
Используйте hostServices.showDocument(location).
Попробуйте поместить следующий код в метод запуска приложения:
getHostServices().showDocument("http://www.yahoo.com");
В дополнение к запросу jewelsea, если вы не знаете, как вызвать getHostServices(), попробуйте это в своем основном классе:
HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
hostServices.showDocument(WEBSITE);
Другой вариант - использовать ProcessBuilder
:
public static void openWebpage(String url) {
try {
new ProcessBuilder("x-www-browser", url).start();
} catch (IOException e) {
e.printStackTrace();
}
}
Вы можете использовать эту опцию, если Desktop.getDesktop().browse(uri)
почему-то зависает без каких-либо ошибок.
Это не может быть сделано, кажется, потому что эта функция не реализована: 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 должен работать.
Вот 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 {
}
}
Попробуйте следующее:
try {
Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}