树视图JavaFX内存空间不足

时间:2015-09-28 13:03:14

标签: java treeview javafx-2

我用自定义对象(SystemNode)创建了javaFX树。 树项目有图形:我通过updateItems()方法设置的复选框和图像图标。

每当我在树中展开或折叠项目时,两次或三次我得到JAVA HEAP MEMORY OUT OF SPACE并且整个UI都会挂起。

PS:每次展开或折叠树节点时都会调用updateItems()方法 我尝试过添加事件处理程序,但它们没有用。

任何人都可以提供一些解决方案。

以下是我设置cellFactory的方法:

treeView_technicalAreas.setCellFactory(Util.getTreeCellFactory());

以下是单元工厂的代码:

public static Callback<TreeView<SystemNode>, TreeCell<SystemNode>> getTreeCellFactory() {
    Callback<TreeView<SystemNode>, TreeCell<SystemNode>> callback = new Callback<TreeView<SystemNode>, TreeCell<SystemNode>>() {
        @Override
        public TreeCell<SystemNode> call(TreeView<SystemNode> p) {
            TreeCell<SystemNode> cell = new TreeCell<SystemNode>() {
                @Override
                protected void updateItem(SystemNode t, boolean isEmpty) {
                    super.updateItem(t, isEmpty); //To change body of generated methods, choose Tools | Templates.
                    if (!isEmpty) {
                        System.out.println("util call back : " + t.getSystem().getName());
                        setText(t.getSystem().getName());
                        HBox hBox = new HBox();

                        CheckBox checkBox = new CheckBox();
                        checkBox.setSelected(t.getSelected());
                        checkBox.selectedProperty().bindBidirectional(t.getSelectedProperty());
                        hBox.setSpacing(SPACING_BETWEEN_ICON_AND_CHECKBOX);
                        ImageView imageView_icon = null;

                        if (t.getSystem().getType() == TYPE.BAREA) {
                            imageView_icon = new ImageView(Constant.Image_AREAS);
                        } else if (t.getSystem().getType() == TYPE.AREA) {
                            imageView_icon = new ImageView(Constant.Image_AREAS);
                        } else if (t.getSystem().getType() == TYPE.DOCUMENT) {
                            imageView_icon = new ImageView(Constant.Image_DOCUMENTS);
                        } else if (t.getSystem().getType() == TYPE.NOUN_NAME) {
                            imageView_icon = new ImageView(Constant.Image_NOUN_NAME);
                        } else if (t.getSystem().getType() == TYPE.CHANGE) {
                            imageView_icon = new ImageView(Constant.Image_DCC);
                        } else if (t.getSystem().getType() == TYPE.TASK) {
                            imageView_icon = new ImageView(Constant.Image_TASK);
                        }

                        hBox.getChildren().addAll(checkBox, imageView_icon);
                        setGraphic(hBox);
                    }
                }
            };

            return cell;
        }
    };

    return callback;
}

0 个答案:

没有答案