我正在尝试构建Web浏览器,并使用WebView来获取网页。我需要获取存储历史记录的URL和标题名称。在推送和打印两个阵列列表的值时维护序列
所以我尝试了这种方式:
private void currentScene() {
Platform.runLater(new Runnable() {
@Override
public void run() {
WebView view = new WebView();
engine = view.getEngine();
engine.createPopupHandlerProperty();
engine.titleProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (newValue != null) {
//stores the title name in an arraylist
title.add(newValue);
}
}
});
}
});
engine.locationProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//stores the URL in another arraylist
titleUrl.add(newValue);
//sets the text of the location text field
locationTextField.setText(newValue);
}
});
}
});
jfxPanel.setScene(new Scene(view));
}
});
}
我打印出来的值:
for (int i = 0; i < title.size(); i++) {
System.Out.Println(title.get(i)+" : "+titleUrl.get(i));
}
但我的输出类似
Google : http://www.yahoo.com
Yahoo : http://www.google.com
谁能告诉我在哪里做我出错了?提前致谢。
,如果你知道调用2个监听器的时间顺序(例如,titleProperty监听器总是先调用),那么您可以检查第二个监听器的第一个列表的长度,并且只在第一个监听器的列表增大1个元素时才添加内容从第二位听众的名单。 – Hani
你可以在你的答案中显示吗? – IAmBlake