如何用 URL 中的数据填充 javaFX 中的 ListView?

How to fill ListView in javaFX with data from URL?

我想使用 HttpURLConnection 从服务器下载一个文件,然后用这个 file.File 的内容填充 ListView 的内容就像 name1#name2#name...,我用新线程下载它,然后将它拆分为一个数组,但我不能用这个数组填充 ListView(只有第一个元素进入 listview,其他元素不显示)

package miz.bjcodes;

import java.io.*;
import java.net.*;
import java.util.*;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javax.swing.JOptionPane;

public class FXMLDocumentController implements Initializable {
    private static String url = "http://127.0.0.1:8888//bjcodes//";
    @FXML private ListView lv;
    @FXML private TextArea ta;

    @FXML
    private void btn1click(ActionEvent event){
        new Thread(new Runnable(){
            @Override
            public void run(){
                try{
                    URL u = new URL(url + "listjava.txt");
                    HttpURLConnection con = (HttpURLConnection) u.openConnection(Proxy.NO_PROXY);
                    con.setUseCaches(false);
                    con.setDoInput(true);
                    con.connect();
                    String st;
                    BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
                    st = br.readLine();
                    br.close();con.disconnect();
                    System.out.println(st);
                    String[] ss = st.split("#",-1);
                    loadList(ss);
                }
                catch(Exception ex){}
            }
        }).start();
    }

    private void loadList(String[] ss){
        for(String str : ss){
            lv.getItems().add(str);
        }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {

    }    

}

您正试图在错误的线程中向 ListView 添加内容。当前视图的每个更改 必须 在 Java FX 应用程序线程中完成。

private void loadList(String[] ss) {
    final ObservableList<String> list = FXCollections.observableArrayList(ss);
    Platform.runLater(() -> {
        lv.setItems(list);
    });
}