添加ActionListener for循环抛出StackOverflowError

时间:2013-04-28 12:27:34

标签: java swing jbutton actionlistener stack-overflow

我运行此代码时收到java.lang.StackOverflowError

Map<JButton, Integer> buttons = new HashMap<JButton, Integer>();
JPanel main = new JPanel(new GridLayout(4, 4, 4, 4));

    for(int i = 0; i < 16; i++) {
        JButton jb = new JButton(i+"");
        jb.addActionListener(new MyActionListener());
        switch(i) {
        case 0:
            jb.setText("1");
        case 1:
            jb.setText("2");
        case 2:
            jb.setText("3");
        (...) 
        case 15:
            jb.setText("/");
        }
        buttons.put(jb, i);
        main.add(jb);
    }

    this.getContentPane().add(main);

为什么会发生错误?我怎么能解决它?感谢。

2 个答案:

答案 0 :(得分:0)

解决方案1:

    case 1:
        jb.setText("2");
     **break**

尝试在切换案例后暂停。我建议你在切换案例结束时也使用“默认”。

解决方案2: 请检查您是否有任何无限的递归函数,如

public void foo(){
  foo();  //never stops
}

有关stackoverflow错误的详细信息 What is a StackOverflowError?

答案 1 :(得分:0)

好的我明白了。问题在于使用外部MyActionListener类。我必须在类中创建void actionPerformed(),我在其中创建新的JButton并添加implements ActionListener

无论如何,谢谢你的答案。