When a TableView component is scrolled down and some items are not vissible a NullPointerException is thrown on removal of all items (e.g. getItems().clear()).
If the line containing
tv.scrollTo(19);
is removed in the given example below, everything works fine. Does not happen on my Ubuntu machine.
My workaround for now is to call
tv.scrollTo(0);
before removing all items.
VBox root = new VBox();
root.setMaxWidth(200);
root.setMaxHeight(200);
root.setMinWidth(200);
root.setMinHeight(200);
final javafx.scene.control.TableView<String> tv = new javafx.scene.control.TableView<>();
tv.getColumns().add(new TableColumn<String, Object>());
for (int i=0; i<20; ++i) {
tv.getItems().add("test "+i);
}
root.getChildren().add(tv);
Button bt = new Button();
bt.addEventHandler(ActionEvent.ACTION, (ActionEvent event) -> {
tv.scrollTo(19);
tv.getItems().clear();
});
root.getChildren().add(bt);
Scene scene = new Scene((Parent)root, 200, 200);
primaryStage.setScene(scene);
primaryStage.show();
NPE:
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at com.sun.javafx.scene.control.skin.VirtualFlow.getCellIndex(VirtualFlow.java:1726)
at com.sun.javafx.scene.control.skin.VirtualFlow.addLeadingCells(VirtualFlow.java:1274)
at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1194)
at com.sun.javafx.scene.control.skin.VirtualFlow.setCellCount(VirtualFlow.java:231)
at com.sun.javafx.scene.control.skin.TableViewSkinBase.updateRowCount(TableViewSkinBase.java:554)
at com.sun.javafx.scene.control.skin.VirtualContainerBase.checkState(VirtualContainerBase.java:113)
at com.sun.javafx.scene.control.skin.VirtualContainerBase.layoutChildren(VirtualContainerBase.java:108)
at com.sun.javafx.scene.control.skin.TableViewSkinBase.layoutChildren(TableViewSkinBase.java:683)
at javafx.scene.control.Control.layoutChildren(Control.java:576)
at javafx.scene.Parent.layout(Parent.java:1076)
at javafx.scene.Parent.layout(Parent.java:1082)
at javafx.scene.Scene.doLayoutPass(Scene.java:552)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2397)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:314)
at com.sun.javafx.tk.Toolkit$$Lambda$288/1350192245.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:313)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:340)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:525)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:505)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$400(QuantumToolkit.java:334)
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$40/486195546.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101)
at com.sun.glass.ui.win.WinApplication$$Lambda$36/1963387170.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
If the line containing
tv.scrollTo(19);
is removed in the given example below, everything works fine. Does not happen on my Ubuntu machine.
My workaround for now is to call
tv.scrollTo(0);
before removing all items.
VBox root = new VBox();
root.setMaxWidth(200);
root.setMaxHeight(200);
root.setMinWidth(200);
root.setMinHeight(200);
final javafx.scene.control.TableView<String> tv = new javafx.scene.control.TableView<>();
tv.getColumns().add(new TableColumn<String, Object>());
for (int i=0; i<20; ++i) {
tv.getItems().add("test "+i);
}
root.getChildren().add(tv);
Button bt = new Button();
bt.addEventHandler(ActionEvent.ACTION, (ActionEvent event) -> {
tv.scrollTo(19);
tv.getItems().clear();
});
root.getChildren().add(bt);
Scene scene = new Scene((Parent)root, 200, 200);
primaryStage.setScene(scene);
primaryStage.show();
NPE:
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at com.sun.javafx.scene.control.skin.VirtualFlow.getCellIndex(VirtualFlow.java:1726)
at com.sun.javafx.scene.control.skin.VirtualFlow.addLeadingCells(VirtualFlow.java:1274)
at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1194)
at com.sun.javafx.scene.control.skin.VirtualFlow.setCellCount(VirtualFlow.java:231)
at com.sun.javafx.scene.control.skin.TableViewSkinBase.updateRowCount(TableViewSkinBase.java:554)
at com.sun.javafx.scene.control.skin.VirtualContainerBase.checkState(VirtualContainerBase.java:113)
at com.sun.javafx.scene.control.skin.VirtualContainerBase.layoutChildren(VirtualContainerBase.java:108)
at com.sun.javafx.scene.control.skin.TableViewSkinBase.layoutChildren(TableViewSkinBase.java:683)
at javafx.scene.control.Control.layoutChildren(Control.java:576)
at javafx.scene.Parent.layout(Parent.java:1076)
at javafx.scene.Parent.layout(Parent.java:1082)
at javafx.scene.Scene.doLayoutPass(Scene.java:552)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2397)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:314)
at com.sun.javafx.tk.Toolkit$$Lambda$288/1350192245.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:313)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:340)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:525)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:505)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$400(QuantumToolkit.java:334)
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$40/486195546.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101)
at com.sun.glass.ui.win.WinApplication$$Lambda$36/1963387170.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
- duplicates
-
JDK-8097156 java.lang.NullPointerException in com.sun.javafx.scene.control.skin.VirtualFlow.getCellIndex
-
- Closed
-