Нарисуйте график в JFrame с помощью GraphStream

Я пытаюсь создать график с помощью GraphStream API. Я хочу добавить некоторые визуальные эффекты поверх макета графика, нарисованного с помощью API, поэтому я планирую встроить график в JFrame.

Я прочитал этот пост здесь (Как нарисовать график внутри свинга с помощью GraphStream на самом деле?), чтобы посмотреть некоторые реализации, но я всегда получаю ошибку исключения:

Exception in thread "AWT-EventQueue-0" java.lang.VerifyError: (class: org/graphstream/ui/swingViewer/Viewer, method: addDefaultView signature: (Z)Lorg/graphstream/ui/swingViewer/View;) Incompatible argument to function
at ShowGraph$MyFrame.<init>(ShowGraph.java:17)
at ShowGraph$1.run(ShowGraph.java:34)
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 class ShowGraph

{

private static Graph graph = new SingleGraph("Graph");

public static class MyFrame extends JFrame
{
    private static final long serialversionUID = 8394236698316485656L;
    private Viewer viewer = new Viewer(graph,Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
    private View view = viewer.addDefaultView(false);

    public MyFrame()
    {
        setLayout(new BorderLayout());
        add(view,BorderLayout.CENTER);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

public static void main(String args[])
{
    SwingUtilities.invokeLater(new Runnable() 
    {

        public void run() {

            graph.addNode("A");
            graph.addNode("B");
            graph.addNode("C");
            graph.addEdge("AB", "A", "B");
            graph.addEdge("BC", "B", "C");
            graph.addEdge("CA", "C", "A");

            MyFrame frame = new MyFrame();
            frame.setSize(320, 240);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

        }
    });
}

}


person Hugo Gayoso    schedule 25.05.2016    source источник
comment
Можете ли вы предоставить код, по которому вы звоните Viewer.addDefaultView(...)?   -  person zer0chain    schedule 26.05.2016
comment
Я отредактировал сообщение.   -  person Hugo Gayoso    schedule 27.05.2016
comment
Похоже, вы используете старую версию GraphStream, так как средство просмотра и представление теперь находятся в пакете org.graphstream.ui.view. Можешь подтвердить ?   -  person zer0chain    schedule 01.06.2016
comment
Я использую версию 1.3. Кроме того, я включил их последнюю ночную сборку.   -  person Hugo Gayoso    schedule 02.06.2016
comment
Эй, кажется, мне нужно привести объект представления, когда я добавляю в JFrame. Я добавил add((Component)view,BorderLayout.CENTER); и теперь он работает. Знаешь, почему я должен это сделать? Спасибо!   -  person Hugo Gayoso    schedule 02.06.2016
comment
Да. Вы должны сделать это, потому что мы (команда GraphStream) пытаемся сделать пользовательский интерфейс универсальным, поэтому он не будет связан с Swing. Цель состоит в том, чтобы позволить пользователю выбирать в движке пользовательского интерфейса. Таким образом, представление не расширяет непосредственно какой-либо компонент Swing или AWT, и поэтому вам нужно привести его, чтобы сообщить компилятору, что вы пытаетесь сделать.   -  person zer0chain    schedule 03.06.2016