我的类(class)有一点问题。我的程序工作正常,至少如果我只创建 Gui 类的一个实例,但如果我在另一个类上使用“extend”命令来扩展 Gui 类,创建的 Gui 会给我一些错误消息。我有两个类,Gui 类和“Hashings”类。如果我不在 Hashings 类上使用“extend Gui”,一切都很好,但是如果我这样做,我会收到这些错误:
java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Win32GraphicsConfig.java:222)
at java.awt.Window.init(Window.java:505)
at java.awt.Window.<init>(Window.java:537)
at java.awt.Frame.<init>(Frame.java:420)
at java.awt.Frame.<init>(Frame.java:385)
at javax.swing.JFrame.<init>(JFrame.java:189)
at Gui.<init>(Gui.java:33)
at Hashings.<init>(Hashings.java:1)
at Gui.<init>(Gui.java:29)
at Hashings.<init>(Hashings.java:1)
这是 Hashings 类:
public class Hashings extends Gui{
}
这里是 Gui 类(有点令人困惑)
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Gui extends JFrame
{
public static void main (String[] args) {
}
BorderLayout b1 = new BorderLayout();
public int anzahl;
public int ascii;
int e;
JTextField name = new JTextField(8);
JButton confirm2 = new JButton("Einfügen");
JTextField name2 = new JTextField(5);
JButton confirm3 = new JButton("Suchen");
JPanel b = new JPanel();
JPanel c = new JPanel();
JPanel a = new JPanel();
Label[] lab = new Label[10];
Hashings h = new Hashings();
public Gui() {
super();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { dispose(); }
});
int frameWidth = 1280;
int frameHeight = 7;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setTitle("Gui");
setResizable(false);
b.add(name);
b.add(confirm2);
b.add(HashMethod);
c.add(name2);
c.add(confirm3);
this.add(b,BorderLayout.NORTH);
this.add(a,BorderLayout.CENTER);
this.add(c,BorderLayout.SOUTH);
for(int i=0;i<10;i++){
lab[i]=new Label("leer");
}
for(int i=0;i<10;i++){
a.add(lab[i]);
}
setVisible(true);
}
}
最佳答案
在 Gui
类中创建了一个实例 Hashings h = new Hashings();
。
Gui
的第一个实例化调用 Hashings
的构造函数,该构造函数本身调用 Gui
的默认构造函数。现在存在循环初始化循环,直到堆栈溢出并且您得到异常。
只需将一些输出放入 Gui
构造函数中的 System.err
即可确认。
关于java - Java中不能使用 "extend"命令,否则程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50434511/