我是一个尝试构建HangMan游戏的新手程序员。将主类的实例发送到另一个类时获取Stackoverflow错误
所以,我有一个Main类(主JFrame),它实例化不同的其他面板类。一个这样的面板是keyboardPanel
,它基本上是一个JButtons面板。我在Main Class中有一个checkwithKey()
方法,我需要在keyboardPanel
类(用于JButton的ActionListener
类)中调用该方法。为此我在MainClass中创建了一个getInstance()
方法,并在keyboardPanel
类中调用它。当我执行它时,我得到了stackoverflow错误。
下面是MainFrame类的代码片段:
//MainFrame class
public class MainFrame extends JFrame {
public KeyboardPanel keyboardPanel;
private static MainFrame mf;
private MainFrame(){
keyboardPanel = KeyboardPanel.getInstance();
add(keyboardPanel);
}
public static MainFrame getInstance(){
if(mf==null){
mf = new MainFrame();
return mf;
}
else
return mf;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainFrame frame = MainFrame.getInstance();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
protected void checkwithKey(char c){
//Logic
}
}
下面是KeyboardPanel类的代码片段
//KeyboardPanel Class
public class KeyboardPanel extends JPanel {
private static KeyboardPanel kdP;
private MainFrame mf = MainFrame.getInstance() ;
public static KeyboardPanel getInstance(){
if(kdP == null){
kdP = new KeyboardPanel();
return kdP;
}
else
return kdP;
}
private KeyboardPanel(){
//JButton Code..
}
class KeyAction implements ActionListener{
@Override
public void actionPerformed(ActionEvent a) {
char c = a.getActionCommand().charAt(0);
mf.checkwithKey(c); // I need to call the checkwithkey() from Mainclass here
}
}
}
谁能帮助我?
堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
at java.awt.Window.init(Unknown Source)
at java.awt.Window.<init>(Unknown Source)
at java.awt.Frame.<init>(Unknown Source)
at java.awt.Frame.<init>(Unknown Source)
at javax.swing.JFrame.<init>(Unknown Source)
at hangman.MainFrame.<init>(MainFrame.java:119)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
at hangman.MainFrame.<init>(MainFrame.java:134)
at hangman.MainFrame.getInstance(MainFrame.java:30)
添加堆栈跟踪,请 – Jens