为什么初始化Display d时会出现异常?

时间:2019-03-23 13:22:51

标签: java swing

我试图将图形卸载到另一个类,但是当我初始化该类时,我得到:

at java.security.AccessController.getContext(Unknown Source)
at java.awt.Component.<init>(Unknown Source)
at java.awt.Canvas.<init>(Unknown Source)
at Display.<init>(Display.java:11)
at Display.<init>(Display.java:7)

我研究发现有句话说我必须有一个没有参数的构造函数,但是该构造函数似乎无法解决问题。

----这是我初始化显示类的地方----

import java.util.Scanner;

public class Ytube2URL 
{

public static void main(String[] args) {
    Display d = new Display();
    d.initGraphics();

    String Userurl = askUserForURL();
    System.out.println(Userurl);
    String Downloadurl = GetYoutubeOnlyURL(Userurl);    
}
}

-------这是我的Display课------

import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Display extends Canvas
{
Display d = new Display();
JFrame f = new JFrame();
JOptionPane jo =new JOptionPane();

public Display()
{

}

public void initGraphics()
{
    f.add(d);
    f.setSize(200,600);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jo.add(f);
    f.pack();
}
}

感谢您的帮助和解释。

2 个答案:

答案 0 :(得分:0)

您自己在创建new的{​​{1}}实例。因此,每当您创建Display class类型的对象时,它都会再次创建一个新对象,并且此过程一次又一次地递归进行。不要在Display中创建新的Display类型的对象。

工作代码:------显示类别------

Display class

答案 1 :(得分:0)

如果您需要在JFrame中添加显示,则可以执行f.add (this);,因为this使用initGraphics方法引用了Display对象