【发布时间】:2014-07-29 14:06:02
【问题描述】:
早安各位 我的桌子有问题。 我有两个表视图(tbl_notas 和 tbl_disciplinas),我在 tbl_notas 上创建了一个事件,这样当用户选择一个表项时,会自动选择 tbl_disciplinas 中的相应项。我只需要在 tbl_disciplinas 中添加相同的事件,但是当我这样做时,它会产生错误。
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
我试图在表格的焦点属性中创建一个事件,但没有成功
我的变更监听器
tbl_notasListener = (ChangeListener) (ObservableValue observable, Object oldValue, Object newValue) -> {
tbl_disciplinas.getSelectionModel().select(tbl_notas.getSelectionModel().getSelectedIndex());
};
tbl_disciplinasListener = (ChangeListener) (ObservableValue observable, Object oldValue, Object newValue) -> {
tbl_notas.getSelectionModel().select(tbl_disciplinas.getSelectionModel().getSelectedIndex());
};
//add changeListener
tbl_disciplinas.getSelectionModel().selectedItemProperty().addListener(tbl_disciplinasListener);
tbl_notas.getSelectionModel().selectedItemProperty().addListener(tbl_notasListener);
完全错误
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.handleSelectedCellsListChangeEvent(TableView.java:2657)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.handleSelectedCellsListChangeEvent(TableView.java:2657)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.clearAndSelect(TableView.java:2180)
at javafx.scene.control.TableView$TableViewSelectionModel.clearAndSelect(TableView.java:1733)
at com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.simpleSelect(TableCellBehaviorBase.java:318)
at com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.doSelect(TableCellBehaviorBase.java:231)
at com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.mousePressed(TableCellBehaviorBase.java:144)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:95)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:204)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3746)
at javafx.scene.Scene$MouseHandler.access$1800(Scene.java:3471)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1695)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2486)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:314)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:243)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:345)
at com.sun.glass.ui.View.handleMouseEvent(View.java:526)
at com.sun.glass.ui.View.notifyMouse(View.java:898)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
at java.lang.Thread.run(Thread.java:744)
【问题讨论】:
-
每个表中的项目数是否相同?如果没有,您可能需要检查所选索引是否在范围内:
int index = tbl_notas.getSelectionModel().getSelectedIndex();if (index >=0 && index < tbl_disciplinas.getItems().size()) { ...} -
是的,两个表中的金额相同Itemhere is my application,注意我点击图片表右边的notes有两个表,自动选中表中对应的项目纪律,但如果我添加同一个表 ChangeListener 纪律是释放 NPE。
-
即两个表不能有相同的事件,也许解决办法是禁止用户选择表纪律中的一项,所以我只是让表中的ChangeListener注释,但是因为我们禁止用户选择此表中的项目?
-
另一种可能性是,当我单击其中一个表时,她从另一个表中删除了 ChangeListener,因为显然 ChangeListener 应用于两个发生冲突的表。
-
@DOM 您可以考虑在Stack Overflow em Português 提出这个问题,因为所有变量名都是葡萄牙语,尤其是因为您的文本似乎是机器翻译成英文的。