我刚刚编写了一个小用户管理应用程序,您可以在其中创建类型为" 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();
}
}
答案 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());
}