尝试在JavaFX中更新场景时出现线程异常

时间:2019-05-02 22:02:36

标签: java multithreading javafx scene

我认为我遇到了线程问题。一切正常,直到执行函数“ 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);
            }
        }
    }

0 个答案:

没有答案