I'm trying to write an algorithm which builds and visualizes a Gomory-Hu-Tree out of a given network, using JGraphT and JGraphX. I read in another post that I had to override the toString() method of the used DefaultWeightedEdge class to visualize the tree. However, I'm getting the error
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: org.jgrapht.graph.DefaultWeightedEdge cannot be cast to testtest.testeins$MyEdge
at testtest.testeins.buildGraph(testeins.java:129)
at testtest.testeins.createAndShowGui(testeins.java:94)
at testtest.testeins.access$0(testeins.java:90)
at testtest.testeins$1.run(testeins.java:44)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
The class where I use the overriding
public static class MyEdge extends DefaultWeightedEdge {
@Override
public String toString() {
return String.valueOf(getWeight());
}
}
this way of overriding was given in the post I mentioned.
Other code where I use the new class
public static ListenableGraph<String, MyEdge> buildGraph() {
Graph<String, DefaultWeightedEdge> gg = new SimpleWeightedGraph<>(DefaultWeightedEdge.class);
DefaultListenableGraph<String, MyEdge> g = new DefaultListenableGraph(gg);
String x1 = "x1";
String x2 = "x2";
String x3 = "x3";
g.addVertex(x1);
g.addVertex(x2);
g.addVertex(x3);
MyEdge e = g.addEdge(x1, x2);
g.setEdgeWeight(e, 1);
e = g.addEdge(x2, x3);
g.setEdgeWeight(e, 2);
e = g.addEdge(x3, x1);
g.setEdgeWeight(e, 3);
return g;
}
private static void createAndShowGui() {
JFrame frame = new JFrame("DemoGraph");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ListenableGraph<String, MyEdge> g = buildGraph();
JGraphXAdapter<String, MyEdge> graphAdapter =
new JGraphXAdapter<String, MyEdge>(g);
mxIGraphLayout layout = new mxCircleLayout(graphAdapter);
layout.execute(graphAdapter.getDefaultParent());
frame.add(new mxGraphComponent(graphAdapter));
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
Graph<String, DefaultWeightedEdge> bsp = createbspgraph();
GusfieldGomoryHuCutTree<String, DefaultWeightedEdge> tree = new GusfieldGomoryHuCutTree(bsp);
System.out.println("fdg");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}