Java addActionListener方法上的Stackoverflow异常

Java addActionListener方法上的Stackoverflow异常,java,Java,我的申请有一些问题。我正试图用AWT组件创建一个JButton。主要的问题是我有一个例外:在QButton.QButton.addActionListener(QButton.java:83)。 如果我对行//this.addActionListener进行注释,则一切正常。我的目标是扩展面板 public class QButton extends Panel implements MouseListener,ActionListener{ public Label text;

我的申请有一些问题。我正试图用AWT组件创建一个JButton。主要的问题是我有一个例外:在QButton.QButton.addActionListener(QButton.java:83)。 如果我对行//this.addActionListener进行注释,则一切正常。我的目标是扩展面板

public class QButton extends Panel implements MouseListener,ActionListener{
    public Label text;
    ImagePanel image;
    ActionListener listener;

    public QButton(String text){
        Label l = new Label(text);
        this.add(l);
        this.text=l;

        this.setLayout(new GridBagLayout());
        this.setBackground(Color.gray);

        TextButtonActions ac1=new TextButtonActions(this);
        this.addMouseListener(ac1);
        this.text.addMouseListener(ac1);
    }

    public QButton(ImagePanel img){
        this.setLayout(new GridLayout());

        this.image=img;        
        this.add(image);

        PictureButtonActions ac2=new PictureButtonActions(this);
        this.image.addMouseListener(ac2);
        }

    public QButton(String text, ImagePanel img){
        this.setBackground(Color.gray);
        this.setLayout(new GridLayout());

        Label l = new Label(text);
        this.add(l);
        this.text=l;

        this.image=img;
        this.add(image);

        TAndPButtonActions ac3=new TAndPButtonActions(this);
        this.image.addMouseListener(ac3);
        this.text.addMouseListener(ac3);
    }

    public void setText(String txt)
    {
        this.text.setText(txt);
    }

    public String getText()
    {
        return(text.getText());
    }

    public void setImage(ImagePanel i)
    {
        this.remove(image);
        this.image=i;

        this.add(i);
        //System.out.println("setImage");
        this.validate();
    }

    public ImagePanel getImage()
    {
        return(image);
    }

    void addActionListener(ActionListener listener)
    {
        this.listener=listener;
        this.addActionListener(listener);
    }
}

我不熟悉UI方面的东西,但之所以会出现
StackOverflowException
,是因为您的程序试图调用将调用自身的方法

void addActionListener(ActionListener listener)
   // ^^^^^^^^^^^^^^^^^
{
    this.listener=listener;
    this.addActionListener(listener); // <-- will keep calling itself.
       //^^^^^^^^^^^^^^^^^
}
void addActionListener(ActionListener listener)
// ^^^^^^^^^^^^^^^^^
{
this.listener=listener;

这个.addActionListener(listener);//也许你的意思是说
super.addActionListener(listener);

啊,stackoverflow上的另一个stackoverflow问题!!你期待什么?
这个.addActionListener(listener);
无条件地调用自身+1-值得指出的是,如果OP费心打印/查看异常的stacktrace,这一点应该是显而易见的。Java调试的第一课…查看stacktrace!那么我如何为自己的组件创建addActionListener方法呢?我想在一个映像上创建一个addActionListener方法也有同样的问题o放一个鼠标听写器。@Magda Maria Magdalena>你可能想四处搜索答案。如果没有人,用合适的标题开始一个新问题。解释你想做什么,你有什么问题,以及你尝试/期望做什么,详细解释它,这样其他了解UI的人就可以帮助你,而不用花太多时间尝试去做you’你想做什么?你可以阅读。欢迎来到SO。