简体   繁体   English

尝试显示标签的权重时使用jGraphT的java.lang.InstantiationException

[英]java.lang.InstantiationException using jGraphT when trying to display the Weight of a lable

Hi everyone I'm tring to display a graph using jGraphT. 大家好,我想使用jGraphT显示图形。 Instead of labling an edge with the name of the source and target notes I want to display the weight of the edge. 而不是用源注释和目标注释的名称标记边缘,我想显示边缘的权重。 For that, I created an aditional class to overwrite the toString method of DefaultWeightedEdge this way 为此,我创建了一个附加类,以这种方式覆盖DefaultWeightedEdge的toString方法。

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

and instead of using DefaultWeightedEdge I use MyWeightedEdge everywhere, but I'm getting a java.lang.InstantiationException 而不是使用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

I will appreciate any help. 我将不胜感激。 Thank you. 谢谢。

I had the exact same problem. 我有同样的问题。 I had the code for MyWeightedEdgeClass inside another class file. 我在另一个类文件中有MyWeightedEdgeClass的代码。 I put it in its own file (as a public class) and then the ClassBasedEdgeFactory could see it and instantiate it. 我将其放在自己的文件中(作为公共类),然后ClassBasedEdgeFactory可以看到并实例化它。

In this case, you can try to add a constructor in your derived class as following: 在这种情况下,您可以尝试在派生类中添加如下构造函数:

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

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

In my case, it worked well, hope it will work for you as well. 就我而言,它效果很好,希望它也对您有用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM