Java-Fehler Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
War ich bin auf der Suche nach einer Lösung für diesen Fehler, was geschrieben ist, auf der Konsole ist 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)
Hier ist mein code
Erste Klasse
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
public class testing extends JFrame {
private JPanel contentPane;
private testing tes = new testing();
private boolean ranOnce = false;
public testing() {
if (ranOnce = false) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ranOnce = true;
tes = new testing();
tes.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JLabel lblTest = new JLabel("Test");
contentPane.add(lblTest, BorderLayout.CENTER);
}
}
}
Zweiten Klasse
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Test extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test frame = new Test();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton btnTestButton = new JButton("Test Button");
btnTestButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
new testing();
}
});
btnTestButton.setBounds(114, 90, 89, 23);
contentPane.add(btnTestButton);
}
}
Ich bin mit dem eclipse-plugin-Fenster generator ich weiß, der stack-overflow-exception, die durch zu viel Speicher und ich dachte mit wenn(runOnce = false) it-Welt fix it
InformationsquelleAutor bigmac147 | 2015-01-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
in der
testing
Konstruktor, erstellen Sie eine neue Instanz vontesting
jedes mal, wenn Sie erstellen eine Instanz vontesting
, Sie sind also rekursiv erstellen unbegrenzte Anzahl vontesting
Instanzen.Ihrem Ansatz, dieses problem zu lösen ist gut, aber Ihre
ranOnce
boolean ist eine member-variable, als solche, es ist eine protesting
Instanz, so ist es immer falschen getroffen, wenn Sie den Konstruktor.Sollten Sie einfach machen
ranOnce
statisch, so dass es nur eineranOnce
variable gebunden, die Klasse und nicht die Instanzen.EDIT: wie bereits von Sbodd, werden Sie auch ersetzen müssen
mit
so, dass es nicht initialisiert mehr automatisch bei jedem Konstruktor-Aufruf (also der zweite Grund, warum es lief in einem endlosen rekursiven Art und Weise)
Ich machte einmal ausgeführt, statische und nur aufgerufen, neue Test einmal am Anfang und ich kann immer noch nicht zum laufen bekommen, könnten Sie mir bitte helfen
Weiß jemand, wie man dieses Problem beheben?
Wie gesagt Sbodd, werden Sie auch ersetzen müssen
private testing tes = new testing()
mitprivate testing tes
. Aber dennoch, ich Frage mich, was Sie zu erreichen versuchen, ist, warum erstellen Sie einetesting
Instanz insindetesting
Instanzen?ich versuche es so zu machen, dass, wenn Sie eine Taste drücken, es öffnet sich ein neues Fenster
InformationsquelleAutor Angivare
Ich den Fehler behoben indem alle runOnce Sachen in der Test-Klasse und ändern die Schaltfläche geklickt code
InformationsquelleAutor bigmac147