我的职能是:
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
或类似的东西。事实是,您的递归调用永远不会终止。