java - Java中不能使用 "extend"命令,否则程序崩溃

标签 java user-interface extends

我的类(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/

相关文章:

java - 如何在android中的hashmap中的值的帮助下打印键

java - 以下 Java 代码行是什么意思

java - 如何用自己类型的成员扩展一个类?

java - 线程 "main"java.lang.NoSuchMethodError : main 中出现异常

java - 适用于多层应用的标准封装结构

objective-c - 如何使用 Lion 以编程方式制作 NSWindow 全屏?

为窗口的 HBRUSH 创建位图图案

c++ - Qt中如何添加自定义类处理功能

javascript - 'this' 在 Javascript 扩展类中返回未定义

java - 如何从二维数组中删除一行?