Класс рабочего стола в JavaFX

1

Я пытаюсь интегрировать JavaFX WebView в свое приложение.

Проблема в том, что я хочу открывать ссылки в браузере по умолчанию, а не в WebView.

Я много гугл, и все говорят о классе Desktop, поэтому я попробовал.

Вот мой код:

webView.getEngine().locationProperty()
            .addListener(new ChangeListener<String>() {

                @Override
                public void changed(
                        ObservableValue<? extends String> observable,
                        String oldValue, String newValue) {
                    Platform.runLater(() -> webView.getEngine().loadContent(content.get()));
                    new Thread() {
                        @Override
                        public void run() {
                            BrowserOpener.open(newValue);
                        }
                    }.start();
                }
            });

Однако, похоже, это работает, но есть одна проблема. webView.getEngine(). locationProperty().addListener (новый ChangeListener() {

                @Override
                public void changed(
                        ObservableValue<? extends String> observable,
                        String oldValue, String newValue) {
                    Platform.runLater(() -> webView.getEngine()
                            .loadContent(content.get()));
                    new Thread() {
                        @Override
                        public void run() {
                            BrowserOpener.open(newValue);
                        }
                    }.start();
                }
            });

BrowserOpener:

public static void open(String uriString) {
    openUri(URI.create(uriString));
}
public static void openUri(URI uri) {
    if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
        try {
            desktop.browse(uri);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Однако, похоже, это работает, но есть одна проблема. Если я запустил это приложение и нажал ссылку, браузер по умолчанию откроет ссылку, но здесь проблема. Также открывается диспетчер файлов Windows.

Если я изменил BrowserOpener.open(newValue) на BrowserOpener.open("http://google.com") он работает нормально.

У вас есть идеи?

Благодарю.

  • 0
    Можете ли вы зарегистрировать строку newValue и опубликовать несколько примеров значений, которые открываются файловым менеджером Windows?
  • 0
    Я уже сделал отладку. NewValue содержит точно то же значение, что и константа. Также я вставил newValue.equals (постоянная) и его true.
Теги:
javafx
javafx-8
awt

1 ответ

2

Я не знаю, почему так происходит с java.awt.Desktop#browse(URI), но я обнаружил, что есть собственное решение JavaFX, использующее класс HostServices. Поскольку вы используете JavaFX, в любом случае это может быть лучшей идеей. Вот пример, который я только что попробовал:

import javafx.application.Application;
import javafx.application.HostServices;
import javafx.stage.Stage;

public class BrowseTest extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage arg0) throws Exception {
        HostServices host = getHostServices();
        host.showDocument("http://google.com");
    }
}

Обратите внимание, что, насколько мне известно, вы можете получить HostServices из вашего метода getHostServices() Application JavaFX.

  • 0
    Я не уверен на 100%, но я думаю, что вы можете использовать HostServices, только если вы запускаете приложение JavaFX, встроенное в веб-страницу (апплет).
  • 0
    Я попробовал это, и та же самая проблема произошла. Даже я пытался понизить мою Java до 8u11 с 8u20, поскольку у меня возникла проблема с конвейером при закрытии приложения JavaFX. (возможно ошибка, потому что кажется, что это не появляется сейчас)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню