gpt4 book ai didi

java - 如何使用来自 URL 的数据填充 javaFX 中的 ListView?

转载 作者:行者123 更新时间:2023-12-02 02:57:49 26 4
gpt4 key购买 nike

我想使用 HttpURLConnection 从服务器下载一个文件,然后用该文件的内容填充 ListView。文件的内容类似于 name1#name2#name... ,我使用 new Thread 下载它,然后将其拆分为一个数组,但是我无法用这个数组填充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 添加内容。对当前 View 的每次更改都必须在 Java FX 应用程序线程中完成。

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

关于java - 如何使用来自 URL 的数据填充 javaFX 中的 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42830787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com