2017-03-16 6 views
0

Ich möchte eine Datei vom Server mit HttpURLConnection herunterladen und dann füllen Sie ListView mit Inhalt dieser Datei. Datei Inhalt ist wie name1 # name2 # name ..., ich lade es mit neuen Thread und dann auf ein Array aber ich es kann nicht mit diesem Listview-Array füllen (nur erste Element geht zu zeigen, Listview und andere nicht)Wie füllt man ListView in javaFX mit Daten von URL?

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) { 

    }  

} 

Antwort

2

Sie versuchen, Inhalte zu ListView in falschen Thread hinzuzufügen. Jede Änderung der aktuellen Ansicht muss in Java FX Application Thread erfolgen.

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

in JDK Version 1.7 i tat dies: Platform.runLater (neu Runnable() { public void run() { für (String str. Ss) { lv.getItems() hinzufügen (str) ; } } }); . Danke. –