我的职能是:

private void addEdges(mxICell mainObject, List<Object> edgesList) {
        if (mainObject.getEdgeCount() > 0) {
            // for (int i = 0; i < mainObject.getEdgeCount(); i++) {
            edgesList.add(mainObject.getEdgeAt(0));
            addEdges(((Line) mainObject.getEdgeAt(0)).getSource(), edgesList);
        }
        // }
        else
            return;
    }


开始更新
函数调用在这里:

for (Object obj : map.values()) {
                if (obj instanceof Port
                        && ((Port) obj).getParent().getStyle().equals("POWER")) {

                    String Feeder = ((Port) obj).getParent().getValue()
                            .toString();

                    List<Object> edgesList = new ArrayList<Object>();

                    Port p = (Port) obj;

                    mxICell mainObject = p;

                    addEdges(mainObject, edgesList);
//staff
}}


结束更新
它给了我一个

 Exception occurred during event dispatching:
java.lang.StackOverflowError

最佳答案

这是因为一旦mainObject的边沿计数大于零,该函数便会反复调用自身,从而导致stackoverflow异常。您需要定义适当的终止条件。

您的数据结构中很可能有一个圆圈。

例如:

mainObject1.getEdgeAt(0).source == mainObject2
mainObject2.getEdgeAt(0).source == mainObject1


或类似的东西。事实是,您的递归调用永远不会终止。

10-06 15:03