Java Graphstream鼠标侦听器和Swing JMenuBar的奇怪行为
我正在制作一个创建和显示图形的程序 我有一个类,它处理图形并实现鼠标侦听器Graphstream ViewerListener。 为了捕获事件,需要使用循环并调用泵方法,直到完成 要显示图形,Graphstream库有一个视图对象,它可以扩展并用作常规Jpanel,只需将视图对象设置为JFrame中的内容窗格 当与没有菜单栏的JFrame一起使用时,我的类可以很好地工作 但是当我在JFrame上设置JMenuBar时,问题就开始了。 我在graph类中调用该方法,它进入循环,但ViewerListener不工作,就像它不侦听事件一样。为什么? 这是我的课程代码,不必要的东西省略了Java Graphstream鼠标侦听器和Swing JMenuBar的奇怪行为,java,swing,mouselistener,jmenubar,graphstream,Java,Swing,Mouselistener,Jmenubar,Graphstream,我正在制作一个创建和显示图形的程序 我有一个类,它处理图形并实现鼠标侦听器Graphstream ViewerListener。 为了捕获事件,需要使用循环并调用泵方法,直到完成 要显示图形,Graphstream库有一个视图对象,它可以扩展并用作常规Jpanel,只需将视图对象设置为JFrame中的内容窗格 当与没有菜单栏的JFrame一起使用时,我的类可以很好地工作 但是当我在JFrame上设置JMenuBar时,问题就开始了。 我在graph类中调用该方法,它进入循环,但ViewerLis
public class GeneratedGraph implements ViewerListener{
public String[] getNodes(){
boolean flag=true;
startEndNodes[0]=null; startEndNodes[1]=null;
arrayposition=0;
while(flag){
System.out.println("Inside the loop");
fromViewer.pump();
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(startEndNodes[0]!=null && startEndNodes[1]!=null){
flag=false;
}
}
System.out.println("Outside the loop");
return startEndNodes;
}
public void buttonPushed(String id) { //This method fires up when you click on a node
System.out.println("Button pushed on node "+id);
startEndNodes[arrayposition]=id;
arrayposition++;
if(arrayposition>1){ arrayposition=0;}
}
}
现在,要把事情放在透视图中,它工作,进入,抓住节点,然后很好地退出循环。不必要的代码再次被省略
public class main extends implements ActionListener {
public static void main(String args[]){
JFrame mainFrame = new JFrame("Graph");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GeneratedGraph myGraph = new GeneratedGraph(mainFrame);
myGraph.option1(5,6); //a method which creates a graph
myGraph.show();
mainFrame.pack();
mainFrame.setVisible(true);
String s[] = myGraph.getNodes();
}
}
但是当我加上这个的时候,它没有。它只是进入循环内部,来自ViewerListener的事件从不触发,因此它会被卡住
public class main extends implements ActionListener {
public static void main(String args[]){
JFrame mainFrame = new JFrame("Graph");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar= new JMenuBar();
mainFrame.setJMenuBar(menuBar);
JMenu algorithmMenu = new JMenu("Algorithms");
JMenuItem dijkstra = new JMenuItem("Dijkstra");
dijkstra.addActionListener(this);
dijkstra.setActionCommand("Dijkstra");
algorithmMenu.add(dijkstra);
menuBar.add(algorithmMenu);
GeneratedGraph myGraph = new GeneratedGraph(mainFrame);
myGraph.option1(5,6); //a method which creates a graph
myGraph.show();
mainFrame.pack();
mainFrame.setVisible(true);
String s[] = myGraph.getNodes();
}
}
似乎打破一切的部分是这个
menuBar.addalgorithmMenu;
当我注释掉这一行时,效果很好
是否知道是什么原因导致ViewerListener没有响应?它看起来是如此随机,以至于一个JMenuBar会打破它