如何使WebView检测到与服务器的连接失败

时间:2014-05-01 15:46:37

标签: java swing webview javafx-2

我在Swing应用程序中使用了以下JavaFX WebView

SimpleSwingBrowser

我希望在与服务器的连接失败时检测到事件。

engine.getLoadWorker()
    .exceptionProperty()
    .addListener(new ChangeListener<Throwable>() {

        public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value) {
            if (engine.getLoadWorker().getState() == FAILED) {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override public void run() {
                        JOptionPane.showMessageDialog(
                                panel,
                                (value != null) ?
                                engine.getLocation() + "\n" + value.getMessage() :
                                engine.getLocation() + "\nUnexpected error.",
                                "Loading error...",
                                JOptionPane.ERROR_MESSAGE);
                    }
                });
            }
        }
    });

奇怪。即使我明确关闭我的互联网连接,这也行不通。 engine.getLoadWorker().getState()将始终返回RUNNING。

我错过了哪一步?

1 个答案:

答案 0 :(得分:2)

我们应该监视state属性而不是异常属性。

engine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {

    @Override
    public void changed(ObservableValue<? extends State> observable, State oldValue, final State newValue) {
        if (newValue == FAILED) {
            final int result = JOptionPane.showConfirmDialog(
                panel,
                MessagesBundle.getString("error_message_unable_connect_to_internet"),
                MessagesBundle.getString("error_title_unable_connect_to_internet"),
                JOptionPane.YES_NO_OPTION);

            if (result == JOptionPane.YES_OPTION) {
                if (loadedURL != null) {
                    engine.load(loadedURL);
                }
            }
        }
    }
});