2014-04-13 26 views
4

我試圖從MySQL數據庫讀取一些值並將其顯示在JavaFX的Menu中。我的代碼如下。以前我用Buttons而不是Menu。它運行良好,但我並不覺得按鈕更好,所以我決定使用Menu。當我運行這段代碼時,我得到了標題中提到的異常。java.lang.IllegalArgumentException:Children:添加重複的子項:parent = VBox @ 872be7

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 = [email protected] 
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" 

這怎麼出現異常?我該如何糾正它?

+0

是工作人員的名字與衆不同? – pjp

+0

@pjp是,它的主鍵。它就像我們的名字一樣,通過在它們之間放置'_'來避免單詞之間的空間,例如 - Rekha_P_S – TomJ

回答

8

每次迭代結果集時,都會在菜單欄中添加相同的菜單(「menuFile1」)。您無法多次添加相同的菜單。

(如果你只是看看堆棧跟蹤,就可以明白這一點,我想管線466必須menuBar.getMenus().addAll(menuFile1);

只需添加菜單的菜單欄一次,然後添加不同的菜單項,這裏面。循環。

同樣,出於某種原因,您反覆添加菜單欄中的VBOX。只需添加一次,外循環。