有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java例外。lang.InstanceionException在尝试显示标签重量时使用jGraphT

大家好,我想用jGraphT显示一个图表。我想显示边的权重,而不是用源注释和目标注释的名称标记边。为此,我创建了一个传统类,以这种方式覆盖DefaultWeightedEdge的toString方法

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

而不是使用DefaultWeightedEdge,我在任何地方都使用MyWeightedEdge,但我得到了一个 JAVAlang.实例化异常

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

我将感谢任何帮助。谢谢


共 (2) 个答案

  1. # 1 楼答案

    我也有同样的问题。我在另一个类文件中有MyWeightedEdge类的代码。我把它放在自己的文件中(作为一个公共类),然后ClassBasedGeFactory可以看到它并实例化它

  2. # 2 楼答案

    在这种情况下,您可以尝试在派生类中添加构造函数,如下所示:

    class MyWeightedEdge extends DefaultWeightedEdge {
      //add this constructor
      public MyWeightedEdge() {
        super();
      }
    
      @Override
      public String toString() {
        return Double.toString(getWeight());
      }
    }
    

    在我的情况下,它工作得很好,希望它也能为你工作