0

私の機能は次のとおりです。

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;
    }

BEGING UPDATE 関数の呼び出しは次のとおりです。

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
}}

END UPDATE それは私に与えます

 Exception occurred during event dispatching:
java.lang.StackOverflowError
4

2 に答える 2

2

これは、関数のエッジ カウントがmainObject0 より大きくなると、関数が何度も自分自身を呼び出し、stackoverflow 例外が発生するためです。適切な終了条件を定義する必要があります。

データ構造に円がある可能性が最も高いです。

例えば:

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

またはそのようなもの。実際、再帰呼び出しは決して終了しません。

于 2014-01-22T11:47:34.963 に答える