2013-04-28 94 views
0

我得到java.lang.StackOverflowError當我運行這段代碼:在循環中添加的ActionListener中拋出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); 

這是爲什麼錯誤發生?我怎麼修復它?謝謝。

+1

也許你會得到一個無限循環,同時增加動作監聽,你確定你的'MyActionListener'代碼是正確的?你能發佈完整的堆棧跟蹤和完整的代碼嗎? – BackSlash 2013-04-28 12:30:27

+0

此外,它將始終將文本設置爲「/」。你忘了給你的個案添加'break'。 – 2013-04-28 12:32:30

+1

爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-04-28 12:55:44

回答

0

好吧,我想通了更多的信息。問題在於使用外部MyActionListener類。我不得不在創建新的JButton的課程中創建void actionPerformed(),並在那裏添加implements ActionListener

無論如何感謝您的回答。

0

解決方案1:

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

試圖把斷開關的情況後。我建議你在開關盒的末端也使用「默認」。

解決方案2: 請檢查您是否已經像

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

任何無窮遞歸函數有關計算器錯誤 What is a StackOverflowError?

+0

我非常懷疑這個答案。你的聲譽是'沒有找到'! :) – 2013-04-28 12:59:53