0

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

为什么会发生这种错误?我该如何解决?谢谢。

4

2 回答 2

0

解决方案1:

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

尝试在 switch case 之后放置 break。我建议您在切换案例的末尾也使用“默认”。

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

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

有关 stackoverflow 错误的更多信息 什么是 StackOverflowError?

于 2013-04-28T12:45:22.160 回答
0

好的,我想通了。问题在于使用外部MyActionListener类。我必须void actionPerformed()在创建新 JButtons 的类中创建并在那里添加implements ActionListener

无论如何感谢您的回答。

于 2013-04-30T19:37:57.933 回答