我运行此代码时收到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);
为什么会发生错误?我怎么能解决它?感谢。
答案 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
。
无论如何,谢谢你的答案。