Ich bin ein Anfänger-Programmierer, der versucht, das HangMan-Spiel zu erstellen.Einen Stackoverflow-Fehler beim Senden der Instanz der Hauptklasse an eine andere Klasse erhalten
Also habe ich eine Main-Klasse (Main JFrame), die verschiedene andere Panel-Klassen instanziiert. Ein solches Panel ist , das im Grunde ein Panel mit JButtons ist. Ich habe eine checkwithKey()
Methode in der Hauptklasse und ich muss das in der Klasse (für die ActionListener
Klasse der JButtons) nennen. Dafür habe ich in MainClass eine getInstance()
Methode erstellt und diese in der Klasse aufgerufen. Wenn ich es ausführe, erhalte ich den Stackoverflow-Fehler.
Unten finden Sie den Code-Schnipsel von Mainframe-Klasse:
//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
}
}
Unten sind die Code-Schnipsel KeyboardPanel Klasse
//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
}
}
}
Kann mir jemand helfen mit diesem?
Stacktrace:
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)
die stacktrace please – Jens