Получение исключения «AWT-EventQueue-0» при попытке переопределить toString () - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь написать алгоритм, который строит и визуализирует дерево Гомори-Ху из заданной сети, используя JGraphT и JGraphX.В другом посте я прочитал, что мне пришлось переопределить метод toString () используемого класса DefaultWeightedEdge для визуализации дерева.Однако я получаю сообщение об ошибке

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)

Класс, в котором я использую переопределение

public static class MyEdge extends DefaultWeightedEdge {
        @Override
        public String toString() {
            return String.valueOf(getWeight());
        }
    }

, этот способ переопределения был дан в посте, о котором я упоминал.

Другой код, где я использую новый класс

 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();
            }
        }); 

    }

...