2017-03-16 100 views
0

我想用HttpURLConnection從服務器上下載文件,然後用這個文件的內容填充ListView.File的內容就像name1#name2#name ...,我用新的Thread下載它,然後將它拆分成一個數組,但是我可以不填的ListView這個陣列(只是第一個元素去ListView和其他元素不顯示)如何使用URL中的數據填充javaFX中的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) { 

    }  

} 

回答

2

您正試圖內容錯誤的線程添加到ListView。在Java FX應用程序線程中完成對當前視圖必須的每個更改。

private void loadList(String[] ss) { 
    final ObservableList<String> list = FXCollections.observableArrayList(ss); 
    Platform.runLater(() -> { 
     lv.setItems(list); 
    }); 
} 
在JDK 1.7版本
+0

我這樣做:Platform.runLater(新的Runnable(){ 公共無效的run(){ 爲(字符串str:SS){ lv.getItems()加(STR) ; } } }); 。謝謝。 –

相關問題