Java Graphstream视图未加载

Java Graphstream视图未加载,java,swing,graphstream,Java,Swing,Graphstream,我有以下模式: 一个Java类,它扩展了JFrame,实例化了另一个 包含返回空白屏幕的我的图形 第二个类是一个普通类,其中包含main方法,调用 包含返回普通图的my graph的同一类 现在,为什么JFrame类返回一个空白图 我的图形类代码 public class grafoComparacao implements ViewerListener { private List<Comparados> integralizacoesComparadas; p

我有以下模式:

  • 一个Java类,它扩展了JFrame,实例化了另一个 包含返回空白屏幕的我的图形

  • 第二个类是一个普通类,其中包含main方法,调用 包含返回普通图的my graph的同一类

现在,为什么JFrame类返回一个空白图

我的图形类代码

public class grafoComparacao implements ViewerListener {
    private List<Comparados> integralizacoesComparadas;
    private Viewer viewer;
    private Graph graph;
    private View view;
    protected boolean loop = true;

    public grafoComparacao(List<Comparados> listaComparados) throws HeadlessException, InterruptedException {
        System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer");
        this.integralizacoesComparadas = listaComparados;
        graph = new MultiGraph("clicks");
        graph.addAttribute("ui.stylesheet", GraphsStreamStylesheet.stylesheet);

        adicionaNodes(graph);

        viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
        viewer.enableAutoLayout();
        view = viewer.addDefaultView(false);

        JFrame frame = new JFrame("Comparação de catálogos");
        frame.add((Component) view);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

        ViewerPipe fromViewer = viewer.newViewerPipe();
        fromViewer.addViewerListener(this);
        fromViewer.addSink(graph);

        frame.setVisible(true);

        while(loop) {
            fromViewer.pump();
        }        
    }

    //this actually works too.
//    public static void main(String[] args) throws HeadlessException, InterruptedException{
//        Control.Controller ctrl = new Controller();
//        JFileChooser escolherAlunos = new JFileChooser();
//        escolherAlunos.setMultiSelectionEnabled(true);
//        escolherAlunos.showOpenDialog(null);
//        File[] integralzacoes = escolherAlunos.getSelectedFiles();
//        List<Comparados> integralizacoesComparadas = ctrl.geraComparacaoIntegralizacoes(integralzacoes);
//        try {
//            grafoComparacao comparacao = new grafoComparacao(integralizacoesComparadas);
//        } catch (HeadlessException ex) {
//            Logger.getLogger(FrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
//        } catch (InterruptedException ex) {
//            Logger.getLogger(FrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
//        }
//        new grafoComparacao(integralizacoesComparadas);
//    }

    @Override
    public void viewClosed(String string) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void buttonPushed(String string) {

    }

    @Override
    public void buttonReleased(String string) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private void adicionaNodes(Graph graph) {
       //function that populate my graph
    }

}
公共类grafoComparacao实现ViewerListener{
私有列表集成协同比较;
私人观众;
私有图;
私人视野;
受保护的布尔循环=真;
public grafoComparacao(List listaComparados)抛出无头异常、中断异常{
set属性(“org.graphstream.ui.renderer”、“org.graphstream.ui.j2dviewer.J2DGraphRenderer”);
this.integralizacoesComparadas=listaComparados;
图形=新的多重图形(“点击”);
addAttribute(“ui.stylesheet”,graphstreamstylesheet.stylesheet);
阿迪西奥纳米德斯(图);
viewer=新查看器(graph,viewer.ThreadingModel.graph\u在另一个线程中);
enableAutoLayout();
view=viewer.addDefaultView(false);
JFrame=新JFrame(“比较卡塔标识”);
frame.add((组件)视图);
setExtendedState(JFrame.MAXIMIZED_二者);
ViewerPipe fromViewer=viewer.newViewerPipe();
fromViewer.addViewerListener(此);
fromViewer.addSink(图形);
frame.setVisible(true);
while(循环){
fromViewer.pump();
}        
}
//这实际上也有效。
//publicstaticvoidmain(字符串[]args)抛出HeadlessException、InterruptedException{
//Controller.ctrl=new Controller();
//JFileChooser escolherAlunos=新的JFileChooser();
//escolherAlunos.setMultiSelectionEnabled(真);
//escolherAlunos.showOpenDialog(null);
//File[]integralzacoes=escolherAlunos.getSelectedFiles();
//List integrationacecomparadas=ctrl.geraco integrationacoes(integrationzacoes);
//试一试{
//grafoComparacao comparacao=新的grafoComparacao(整合共比较);
//}catch(HeadlessException ex){
//Logger.getLogger(FrmPrincipal.class.getName()).log(Level.SEVERE,null,ex);
//}catch(InterruptedException ex){
//Logger.getLogger(FrmPrincipal.class.getName()).log(Level.SEVERE,null,ex);
//        }
//新grafoComparacao(integralizacoesComparadas);
//    }
@凌驾
公共无效视图已关闭(字符串){
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
@凌驾
公共无效按钮按下(字符串){
}
@凌驾
公共无效按钮未释放(字符串){
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
私有void adicionaNodes(图形){
//填充图形的函数
}
}
大多数人会说,为什么在这里创建JPANEL?我没有找到如何设置它的默认大小,但即使从内部移除jpanel,它也不起作用,显示一个空白的查看器,没有任何异常或其他事情

这是我叫全班同学做我必须做的事情的地方

  JFileChooser escolherAlunos = new JFileChooser();
    escolherAlunos.setMultiSelectionEnabled(true);
    escolherAlunos.showOpenDialog(null);
    File[] integralzacoes = escolherAlunos.getSelectedFiles();
    List<Comparados> integralizacoesComparadas = ctrl.geraComparacaoIntegralizacoes(integralzacoes);
    try {      
        grafoComparacao comparacao = new grafoComparacao(integralizacoesComparadas); // heres the graph call.
    } catch (HeadlessException ex) {
        Logger.getLogger(FrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    } catch (InterruptedException ex) {
        Logger.getLogger(FrmPrincipal.class.getName()).log(Level.SEVERE, null, ex);
    }
JFileChooser escolherAlunos=newjfilechooser();
escolherAlunos.setMultiSelectionEnabled(真);
escolherAlunos.showOpenDialog(null);
File[]integralzacoes=escolherAlunos.getSelectedFiles();
List integrationacecomparadas=ctrl.geraco integrationacoes(integrationzacoes);
试试{
grafoComparacao comparacao=新的grafoComparacao(integralizacoesComparadas);//这是图形调用。
}捕获(无头例外){
Logger.getLogger(FrmPrincipal.class.getName()).log(Level.SEVERE,null,ex);
}捕获(中断异常例外){
Logger.getLogger(FrmPrincipal.class.getName()).log(Level.SEVERE,null,ex);
}
创建SwingWorker之后,图形被渲染,但用户交互消失了

Swing worker,这里我只是收集一些信息,为graph类提供处理信息的可能性

public class VisualizacaoWorker extends SwingWorker<Void, Void>{
    private List<Comparados> listao;
    public VisualizacaoWorker(List<Comparados> lista){
        this.listao = lista;
    }

    @Override
    protected Void doInBackground() throws Exception {
        GrafoComparacao gf = new GrafoComparacao(this.listao);
        return null;
    }

}
公共类VisualizaCoWorker扩展SwingWorker{
列斯托私人名单;
公共可视化ACAOWorker(列表A){
this.listao=lista;
}
@凌驾
受保护的Void doInBackground()引发异常{
GrafoComparacao gf=新的GrafoComparacao(this.listao);
返回null;
}
}
在这里,它的名字

JFileChooser escolherAlunos = new JFileChooser();
escolherAlunos.setMultiSelectionEnabled(true);
escolherAlunos.showOpenDialog(null);
File[] integralzacoes = escolherAlunos.getSelectedFiles();
List<Comparados> integralizacoesComparadas = ctrl.geraComparacaoIntegralizacoes(integralzacoes);
VisualizacaoWorker visualizacaoWorker = new VisualizacaoWorker(integralizacoesComparadas);
visualizacaoWorker.execute();
JFileChooser escolherAlunos=newjfilechooser();
escolherAlunos.setMultiSelectionEnabled(真);
escolherAlunos.showOpenDialog(null);
File[]integralzacoes=escolherAlunos.getSelectedFiles();
List integrationacecomparadas=ctrl.geraco integrationacoes(integrationzacoes);
VisualizaCoWorker VisualizaCoWorker=新的VisualizaCoWorker(集成化协同比较);
VisualizaCoWorker.execute();

首先,类名应以大写字符开头。“grafoComparacao”应该是
grafoComparacao

现在,为什么JFrame类返回一个空白图

我猜您的
GrafoComparacao
类是在一些侦听器代码中创建的,这意味着代码正在负责绘制GUI的事件调度线程上执行

while(loop) 
{
    fromViewer.pump();
} 
这看起来像是在EDT上执行的阻塞代码,这意味着您正在使用一个无限循环,这意味着代码永远不会完成执行,因此GUI永远无法响应事件或重新绘制自身

该代码应该在一个单独的线程(可能是一个
SwingWorker
)上执行,这样EDT就可以自由地响应事件并重新绘制自己

请阅读有关的Swing教程中的部分