0

jGraphTを使用してグラフを表示しようとしています。ソース ノートとターゲット ノートの名前でエッジをラベル付けする代わりに、エッジの重みを表示したいと考えています。そのために、この方法で DefaultWeightedEdge の toString メソッドを上書きする追加のクラスを作成しました

    class MyWeightedEdge extends DefaultWeightedEdge {
      @Override
      public String toString() {
        return Double.toString(getWeight());
      }
    }

DefaultWeightedEdge を使用する代わりに、どこでも MyWeightedEdge を使用していますが、java.lang.InstantiationException が発生しています

Exception in thread "main" java.lang.RuntimeException: Edge factory failed
at org.jgrapht.graph.ClassBasedEdgeFactory.createEdge(ClassBasedEdgeFactory.java:86)
at org.jgrapht.ext.JGraphModelAdapter$ShieldedGraph.addEdge(JGraphModelAdapter.java:1091)
at org.jgrapht.ext.JGraphModelAdapter.handleJGraphInsertedEdge(JGraphModelAdapter.java:506)
at org.jgrapht.ext.JGraphModelAdapter.handleJGraphChangedEdge(JGraphModelAdapter.java:474)
at org.jgrapht.ext.JGraphModelAdapter$JGraphListener.handleChangedEdges(JGraphModelAdapter.java:964)
at org.jgrapht.ext.JGraphModelAdapter$JGraphListener.graphChanged(JGraphModelAdapter.java:893)
at org.jgraph.graph.DefaultGraphModel.fireGraphChanged(Unknown Source)
at org.jgraph.graph.DefaultGraphModel$GraphModelEdit.execute(Unknown Source)
at org.jgraph.graph.DefaultGraphModel.insert(Unknown Source)
at org.jgrapht.ext.JGraphModelAdapter.internalInsertCell(JGraphModelAdapter.java:769)
at org.jgrapht.ext.JGraphModelAdapter.handleJGraphTAddedEdge(JGraphModelAdapter.java:651)
at org.jgrapht.ext.JGraphModelAdapter$JGraphTListener.edgeAdded(JGraphModelAdapter.java:1036)
at org.jgrapht.graph.DefaultListenableGraph.fireEdgeAdded(DefaultListenableGraph.java:317)
at org.jgrapht.graph.DefaultListenableGraph.addEdge(DefaultListenableGraph.java:182)
at Visual.JGraphAdapterDemo.init(JGraphAdapterDemo.java:135)
at Visual.JGraphAdapterDemo.<init>(JGraphAdapterDemo.java:89)
at world.Conection.paint(Conection.java:268)
at world.Conection.<init>(Conection.java:56)
at world.Conection.main(Conection.java:44)
Caused by: java.lang.InstantiationException: Visual.JGraphAdapterDemo$MyWeightedEdge
    at java.lang.Class.newInstance(Unknown Source)
    at     org.jgrapht.graph.ClassBasedEdgeFactory.createEdge(ClassBasedEdgeFactory.java:84)
    ... 18 more

どんな助けにも感謝します。ありがとうございました。

4

2 に答える 2

2

私はまったく同じ問題を抱えていました。別のクラス ファイル内に MyWeightedEdgeClass のコードがありました。それを独自のファイルに (パブリック クラスとして) 配置すると、ClassBasedEdgeFactory がそれを認識してインスタンス化できます。

于 2013-09-25T14:25:33.863 に答える
2

この場合、次のように派生クラスにコンストラクターを追加することができます。

class MyWeightedEdge extends DefaultWeightedEdge {
  //add this constructor
  public MyWeightedEdge() {
    super();
  }

  @Override
  public String toString() {
    return Double.toString(getWeight());
  }
}

私の場合、うまくいきました。あなたにとってもうまくいくことを願っています。

于 2014-01-15T08:50:19.213 に答える