在每个类中定义两个不同类的对象

时间:2017-07-07 10:53:22

标签: java swing

我创建了两个类。

一个类称为Frames,在其中我定义了JframeImage

在另一个名为Panels的班级中,我定义了一个Jpanel

我想使用getPanel方法将面板传递给Frames类,并使用getImage方法将图像传递给Panels类。

所以我在Panels类中创建了一个Frames对象来调用getImage 并在Frames类中创建了一个Panels对象来调用getPanel。 但是当我运行代码时,会显示以下消息:

  

线程“main”中的异常java.lang.StackOverflowError。

public class panels{

    frames framesObject = new frames();
    JPanel panel = new JPanel(){
        public void painComponent(Graphics g){
            super.paintComponent(g);
            g.drawImage(frames.getImage(),0,0,null);
        }
    };

    public Jpanel getPanel(){
        return panel;
    }

}

public class frames{

    JFrame frame= new JFrame();
    Toolkit toolkit= Toolkit.getDefaultToolkit();
    Image image = toolkit.getImage("..source file..");
    panels panelsObject= new panels();
    frame.add(panelsObject.getPanel());

    public Image getImage(){
        return image;
}

2 个答案:

答案 0 :(得分:0)

  

所以我在Frames类中创建了一个Panels对象来调用getImage()并在Panels类中创建了一个Frames对象来调用getPanel()

所以你创建了一个相互递归。

解决方案:不要。决定哪些应该在哪个内部,并坚持下去。

答案 1 :(得分:0)

在你的情况下,你正在建立一个无休止的递归,这会导致堆栈溢出...

我认为最简单的方法是在class 2中实例化class 1,然后将class 1的对象传递给class 2。这样做,你可以在两者中互相引用。

public class panels{

    public JPanel panel;

    public panels(frames framesObject){
        panel = new JPanel(){
            public void painComponent(Graphics g){
                super.paintComponent(g);
                g.drawImage(framesObject.getImage(),0,0,null);
            }
        };
    }

    public Jpanel getPanel(){
        return panel;
    }

}

public class frames{

    public Image image;

    public static void main(String[] args){
        new frames();
    }

    public frames(){
        JFrame frame= new JFrame();
        Toolkit toolkit= Toolkit.getDefaultToolkit();
        image = toolkit.getImage("..source file..");
        panels panelsObject= new panels(this);
        frame.add(panelsObject.getPanel());
    }

    public Image getImage(){
        return image;
    }
}