我认为我遇到了线程问题。一切正常,直到执行函数“ addButton.setOnAction()”(在display()函数中)的lambda表达式中的代码。
在控制台中,它说“线程“ JavaFX Application Thread”中的异常” java.lang.IllegalArgumentException:网格hgap = 10.0,vgap = 8.0,alignment = TOP_LEFT已设置为另一个场景的根 在javafx.graphics/javafx.scene.Scene$8.invalidated(未知来源)”
它还说,该错误位于lambda表达式的display()函数行以及Launcher.navigator(scene)行中,该行大约位于以下5行。
我试图放置一些while循环来减慢程序速度,但是没有用
这是我的显示功能
public static void display() {
grid.setPadding( new Insets(10,10,10,10));
grid.setVgap(8);
grid.setHgap(10);
....
Button addButton = new Button("Add Contact");
GridPane.setConstraints(addButton, 3, 1);
addButton.setOnAction(e -> { PhoneBook.addEntry(entryName.getText(),entryNumber.getText(),entryNotes.getText());
display();
});
grid.getChildren().addAll(addButton,entryName,entryNumber,entryNotes);
//
Scene scene = new Scene(grid, 630, 250);
Launcher.navigator(scene);
}
这是我的导航器功能
public static void navigator(Scene scene) {
window.setScene(scene);
window.show();
}
这是我的addEntry函数
public static void addEntry(String name, String number, String notes){
Entry newEntry = new Entry(name,number,notes);
int duplicateIndex = findEntry(newEntry.name);
if(duplicateIndex == -1) {
entryList[entryIndex]= newEntry;
entryIndexList[entryIndex] = entryIndex;
entryIndex++;
sortEntry();
}
else {
AlertBox.display("Warning", "You already have this person in your contact"
+ " list, do you want to merge two contacts?");
if(AlertBox.answer == true)
{
mergeDuplicateEntry(duplicateIndex, newEntry);
}
}
}