【发布时间】:2015-01-20 20:44:02
【问题描述】:
我正在寻找解决此错误的方法,控制台上写的是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)
这是我的代码
头等舱
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);
}
}
}
二等
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);
}
}
我正在使用 eclipse 插件窗口构建器,我知道堆栈溢出异常是由过多的内存使用引起的,我认为使用 if(runOnce = false) it world fix 它
【问题讨论】:
-
未来:当你有堆栈溢出时,你必须在调用堆栈中寻找重复模式。在检测到任何此类模式之前,您提供的调用堆栈会中断。显然,您无法提供完整的调用堆栈,但更长的内容会更有帮助。
标签: java jframe stack-overflow