空Arraylist JavaFX
我有这样一个简单的方法:空Arraylist JavaFX,java,string,arraylist,javafx,Java,String,Arraylist,Javafx,我有这样一个简单的方法: public ArrayList<String> getImagefromGoogleUrl() { total = "http://www.google.it/search?q=&hl=it&gbv=2&tbm=isch&prmd=ivnsm&ei=5qW8Vua9Dsb-Pa36h7gH&start=0&sa=N"; String stringa = "casa";
public ArrayList<String> getImagefromGoogleUrl() {
total = "http://www.google.it/search?q=&hl=it&gbv=2&tbm=isch&prmd=ivnsm&ei=5qW8Vua9Dsb-Pa36h7gH&start=0&sa=N";
String stringa = "casa";
total = total.replaceAll("q=", "q=" + stringa);
resultList = new ArrayList<>();
webview = new WebView();
final WebEngine webengine = webview.getEngine();
webengine.documentProperty().addListener((obs, oldDoc, newDoc) -> {
if (newDoc != null) {
nodeList = newDoc.getElementsByTagName("img");
for (int i = 0; i < 10; i++) {
Element img = (Element) nodeList.item(i);
src = img.getAttribute("src");
resultList.add(src);
System.out.println("resultList è grande"+resultList.size());
System.out.println("resultlist vale"+resultList);
// System.out.println(src);
}
}
else
System.out.println("ciao");
});
webengine.load(total);
System.out.println("resultList prima del return è grande"+resultList.size());
return resultList;
}
这样一来,arraylist prova是空的,我不明白为什么?的WebEngine.load
表示:
将网页加载到此引擎中。此方法以异步方式启动
加载并立即返回
因此,当填充列表的回调尚未调用时,使用列表
解决方案是不返回列表,而是接受
消费者
,并在填写完列表后调用它:
public void getImagefromGoogleUrl(Consumer<ArrayList<String>> consumer) {
...
webengine.documentProperty().addListener((obs, oldDoc, newDoc) -> {
... fill list
// no pass it to the consumer
consumer.accept(resultList);
});
}
resultList
从函数返回时是否包含正确的值?否,打印System.out.println(“resultList prima del returnègrande”+resultList.size())
before返回结果列表代码>返回我0。我只在for循环内得到正确的值。抱歉,我不知道。你能给我举个例子吗?@user5913892(1)你调用WebEngine.load
。(2) 加载从另一个线程开始(3)您从getImagefromGoogleUrl
返回并看到一个空列表(4)加载已完成,您的侦听器被调用并填充列表,但都无效。因此,您是在告诉我必须创建一个单独的线程来填充列表吗?谢谢,它可以工作。我将研究你的解决方案,我从不使用Consumer,所以我必须学习如何使用它。
public void getImagefromGoogleUrl(Consumer<ArrayList<String>> consumer) {
...
webengine.documentProperty().addListener((obs, oldDoc, newDoc) -> {
... fill list
// no pass it to the consumer
consumer.accept(resultList);
});
}
getImagefromGoogleUrl(prova -> {
if (prova.size() != 0) {
System.out.println("prova size is" + prova.size());
listaimmagini.addAll(prova);
}
});