javafx - java.lang.IllegalArgumentException : Children: duplicate children added: parent = VBox@872be7

标签 javafx javafx-2

我正在尝试从 MySQL 数据库读取一些值并将其显示在 JavaFX 的菜单中。我的代码如下。以前我使用按钮而不是菜单。它工作得很好,但我对按钮感觉不好,所以我决定使用菜单。当我运行此代码时,我遇到了标题中提到的异常。

private VBox userSelection() throws ClassNotFoundException, SQLException {

    VBox vb1 = new VBox();
    vb1.setPadding(new Insets(40, 150, 20, 200));
    vb1.setSpacing(20);

    MenuBar menuBar = new MenuBar();
    Menu menuFile1 = new Menu("CHOOSE YOUR ACCOUNT");
    menuFile1.setStyle("-fx-border-color: green; -fx-font-size: 14pt; "
            + "-fx-font-family: Comic Sans MS; -fx-padding: 1 10 1 1");

    Text scenetitle2 = new Text("Choose Your Account");
    scenetitle2.setFont(Font.font("Tahoma", FontWeight.BOLD, 20));
    scenetitle2.setUnderline(true);
    vb1.getChildren().addAll(scenetitle2);

    Class.forName("com.mysql.jdbc.Driver");
    connect = DriverManager
            .getConnection("jdbc:mysql://localhost:3306/project?"
                    + "user=root&password=virus");
    statement = connect.createStatement();

    rs = statement.executeQuery("select * from user");

    while (rs.next()) {

        String username = rs.getString("staffname");

        MenuItem add = new MenuItem(username);
        add.setStyle(" -fx-font-size: 18pt; "
            + "-fx-font-family: Calibri; -fx-padding: 1 10 1 1");
        menuFile1.getItems().addAll(add);
        menuBar.getMenus().addAll(menuFile1);

        vb1.getChildren().addAll(menuBar);
    }

    return vb1;
}

异常详细信息是:

java.lang.IllegalArgumentException: Children: duplicate children added: parent = VBox@872be7
at javafx.scene.Parent$1.onProposedChange(Parent.java:307)
at com.sun.javafx.collections.VetoableObservableList.addAll(VetoableObservableList.java:106)
at com.sun.javafx.collections.ObservableListWrapper.addAll(ObservableListWrapper.java:160)
at com.sun.javafx.collections.ObservableListWrapper.addAll(ObservableListWrapper.java:309)
at frontpage.FrontPage.userSelection(FrontPage.java:466)
at frontpage.FrontPage.access$100(FrontPage.java:44)
at frontpage.FrontPage$2.handle(FrontPage.java:129)
at frontpage.FrontPage$2.handle(FrontPage.java:125)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Node.fireEvent(Node.java:6867)
at javafx.scene.control.Button.fire(Button.java:179)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193)
at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336)
at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3311)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3151)
at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3106)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1563)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2248)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:250)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:173)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:292)
at com.sun.glass.ui.View.handleMouseEvent(View.java:530)
at com.sun.glass.ui.View.notifyMouse(View.java:924)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
at java.lang.Thread.run(Thread.java:744)
Exception in thread "JavaFX Application Thread" 

这个异常是怎么发生的?我该如何纠正它?

最佳答案

每次迭代结果集时,都会将相同的菜单 (menuFile1) 添加到菜单栏。您不能多次添加相同的菜单。

(如果你只看堆栈跟踪,你就可以弄清楚;我假设第 466 行一定是:

menuBar.getMenus().addAll(menuFile1);

只需将菜单添加到 MenuBar 一次,然后在循环内向其中添加不同的菜单项。

同样,由于某种原因,您重复将菜单栏添加到VBox。只需在循环外添加一次即可。

关于javafx - java.lang.IllegalArgumentException : Children: duplicate children added: parent = VBox@872be7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044935/

相关文章:

java - 设置目录的读取权限

java - 使用 CSS 在 JavaFX 中设置 RadioButton 子元素的样式

memory-leaks - JavaFX Node 对象不被垃圾回收

java - 我可以创建一个直到媒体播放完毕才返回的函数吗?

java - 在过时的操作系统上部署 JavaFX 应用程序

javafx - 在 JavaFX 中将堆栈跟踪打印到 Textarea 中

javafx-2 - Javafx 中所有场景的通用菜单项

3d - JavaFX 3D 对象之间的并集、交集和差异

Java - 文件保存不起作用

javafx-2 ComboBox 转换器 : method toString(T object) not called for null values