-
Bug
-
Resolution: Incomplete
-
P2
-
None
-
7u40
-
Ubuntu 12.04
java version "1.7.0_40"
I've got OutOfMemory Ex. I've done some search and debug, and have found that
VirtualFlow has infinite loop in this code:
while (offset < viewportLength) {
if (index >= getCellCount()) {
if (offset < viewportLength) filledWithNonEmpty = false;
if (! fillEmptyCells) return filledWithNonEmpty; // fillEmptyCells == true
}
IndexedCell cell = getAvailableCell(index);
setCellIndex(cell, index);
resizeCellSize(cell); // resize happens after config!
cells.addLast(cell);
// Position the cell and update the max pref
positionCell(cell, offset);
maxPrefBreadth = Math.max(maxPrefBreadth, getCellBreadth(cell));
offset += getCellLength(cell); // this code always return 0 because Bounds == {all 0}
cell.setVisible(true);
++index;
}
getCellLength(cell) always 0 than offset olways 0;
JavaFX Application Thread@237, prio=5, in group 'main', status: 'RUNNING'
at com.sun.javafx.scene.control.skin.VirtualFlow.addTrailingCells(VirtualFlow.java:1109)
at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1007)
at com.sun.javafx.scene.control.skin.VirtualFlow.setCellCount(VirtualFlow.java:206)
at com.sun.javafx.scene.control.skin.TreeViewSkin.updateItemCount(TreeViewSkin.java:225)
at com.sun.javafx.scene.control.skin.TreeViewSkin.handleControlPropertyChanged(TreeViewSkin.java:135)
at com.sun.javafx.scene.control.skin.SkinBase$3.changed(SkinBase.java:282)
at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:107)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:196)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)
at javafx.beans.property.IntegerPropertyBase.fireValueChangedEvent(IntegerPropertyBase.java:123)
at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:130)
at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:163)
at javafx.scene.control.TreeView.setTreeItemCount(TreeView.java:515)
at javafx.scene.control.TreeView.updateTreeItemCount(TreeView.java:876)
at javafx.scene.control.TreeView.updateRootExpanded(TreeView.java:928)
at javafx.scene.control.TreeView.access$400(TreeView.java:118)
at javafx.scene.control.TreeView$2.invalidated(TreeView.java:358)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:129)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:163)
at javafx.scene.control.TreeView.setRoot(TreeView.java:378)
VirtualFlow has infinite loop in this code:
while (offset < viewportLength) {
if (index >= getCellCount()) {
if (offset < viewportLength) filledWithNonEmpty = false;
if (! fillEmptyCells) return filledWithNonEmpty; // fillEmptyCells == true
}
IndexedCell cell = getAvailableCell(index);
setCellIndex(cell, index);
resizeCellSize(cell); // resize happens after config!
cells.addLast(cell);
// Position the cell and update the max pref
positionCell(cell, offset);
maxPrefBreadth = Math.max(maxPrefBreadth, getCellBreadth(cell));
offset += getCellLength(cell); // this code always return 0 because Bounds == {all 0}
cell.setVisible(true);
++index;
}
getCellLength(cell) always 0 than offset olways 0;
JavaFX Application Thread@237, prio=5, in group 'main', status: 'RUNNING'
at com.sun.javafx.scene.control.skin.VirtualFlow.addTrailingCells(VirtualFlow.java:1109)
at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1007)
at com.sun.javafx.scene.control.skin.VirtualFlow.setCellCount(VirtualFlow.java:206)
at com.sun.javafx.scene.control.skin.TreeViewSkin.updateItemCount(TreeViewSkin.java:225)
at com.sun.javafx.scene.control.skin.TreeViewSkin.handleControlPropertyChanged(TreeViewSkin.java:135)
at com.sun.javafx.scene.control.skin.SkinBase$3.changed(SkinBase.java:282)
at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:107)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:196)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)
at javafx.beans.property.IntegerPropertyBase.fireValueChangedEvent(IntegerPropertyBase.java:123)
at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:130)
at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:163)
at javafx.scene.control.TreeView.setTreeItemCount(TreeView.java:515)
at javafx.scene.control.TreeView.updateTreeItemCount(TreeView.java:876)
at javafx.scene.control.TreeView.updateRootExpanded(TreeView.java:928)
at javafx.scene.control.TreeView.access$400(TreeView.java:118)
at javafx.scene.control.TreeView$2.invalidated(TreeView.java:358)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:129)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:163)
at javafx.scene.control.TreeView.setRoot(TreeView.java:378)