空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);
    }
});