JavaFX8 - ListView不能离开循环

时间:2016-06-13 14:06:17

标签: java

我刚刚编写了一个小用户管理应用程序,您可以在其中创建类型为" User"的对象。此对象将保存在ArrayList中。现在我正试图通过ListView在gui上打印用户,但每当我启动我的JavaFX8应用程序时,没有任何东西出现,直到我在2-3分钟后出现错误。

看起来像我的while() - 循环不起作用。我还尝试使用以下代码打印只有一个用户并且它正常工作,但是我知道为什么它只打印一个用户:

lv.getItems().add(verwaltung.iterator().next());

我尝试使用以下代码打印完整的ArrayList,但它不起作用..看起来它不会离开循环.. q.q

while(verwaltung.iterator().hasNext()) {
        lv.getItems().add(verwaltung.iterator().next());
    }

我感谢任何帮助...... :)

提前致谢!

user_gui.java

public class user_gui extends Application {

@Override
public void start(Stage primaryStage) throws Exception{
    Userverwaltung verwaltung = new Userverwaltung();
    verwaltung.addUser(new User("Brian", 19));
    verwaltung.addUser(new User("Adam", 10));
    verwaltung.addUser(new User("Jenny", 21));
    BorderPane bp = new BorderPane();
    ListView lv = new ListView();
    while(verwaltung.iterator().hasNext()) {
        lv.getItems().add(verwaltung.iterator().next());
    }
    System.out.print("Hallo");
    bp.setCenter(lv);
    Scene scene = new Scene(bp);
    primaryStage.setScene(scene);
    primaryStage.show();

}

public static void main(String args[]){
    launch(args);
}

}

Userverwaltung.java

 public class Userverwaltung {

private List<User> userlist = new ArrayList();
private File savefile = new File("users.ser");
private static int counter;

public Userverwaltung(){
    counter++;
}

public void addUser(User user){
    userlist.add(user);
}

public void printUsers(){
    Iterator<User> it = userlist.iterator();
    while(it.hasNext()) {
        it.next().printData();
    }
}

public void saveObjects(){
    try(FileOutputStream fos = new FileOutputStream(savefile);
            ObjectOutputStream oos = new ObjectOutputStream(fos);) {
        oos.writeObject(userlist);
    }catch(FileNotFoundException ex) {
        ex.printStackTrace();
    }catch(IOException ex) {
        ex.printStackTrace();
    }
}

public void loadObjects(){
    try(FileInputStream fis = new FileInputStream(savefile);
            ObjectInputStream ois = new ObjectInputStream(fis);) {
        this.userlist = (ArrayList) ois.readObject();
    }catch(FileNotFoundException ex) {
        ex.printStackTrace();
    }catch(ClassNotFoundException ex) {
        ex.printStackTrace();
    }catch(IOException ex) {
        ex.printStackTrace();
    }
}

public Iterator<User> iterator(){
    Iterator<User> it = userlist.iterator();
    return it;
}
}

User.java

public class User implements Serializable {

private String name;
private int age;

public User(String name, int age){
    this.name = name;
    this.age = age;
}

public String getName(){
    return name;
}

public int getAge(){
    return age;
}

public void setName(String name){
    this.name = name;
}

public void setAge(int age){
    this.age = age;
}

public void printData(){
    System.out.println("Name: " + getName() + " - Alter: " + getAge());
}

public String toString(){
    return "Name: " + getName() + " - Alter: " + getAge();
}

}

1 个答案:

答案 0 :(得分:1)

while(verwaltung.iterator().hasNext()) {
    lv.getItems().add(verwaltung.iterator().next());
}

您正在为while循环的每次迭代创建一个新的Iterator。 因此,每当你的循环检查它的状态时,你总是得到一个新的迭代器并从头开始(永远不会到达你的verwaltung列表的末尾)

尝试将其更改为

Iterator iterator = verwaltung.iterator();
while(iterator.hasNext()) {
    lv.getItems().add(iterator.next());
}