java.lang.InstantiationException с использованием jGraphT при попытке отобразить вес метки
Привет всем, я пытаюсь отобразить график с помощью jGraphT. Вместо того, чтобы маркировать ребро с именем исходных и целевых заметок, я хочу отобразить вес ребра. Для этого я создал дополнительный класс для перезаписи метода toString DefaultWeightedEdge таким образом
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
Я буду признателен за любую помощь. Спасибо.
2 ответа
В этом случае вы можете попытаться добавить конструктор в ваш производный класс следующим образом:
class MyWeightedEdge extends DefaultWeightedEdge {
//add this constructor
public MyWeightedEdge() {
super();
}
@Override
public String toString() {
return Double.toString(getWeight());
}
}
В моем случае это сработало хорошо, надеюсь, это сработает и у вас.
У меня была точно такая же проблема. У меня был код для MyWeightedEdgeClass внутри другого файла класса. Я поместил его в свой собственный файл (как открытый класс), а затем ClassBasedEdgeFactory смог увидеть его и создать его экземпляр.