我创建了两个类。
一个类称为Frames
,在其中我定义了Jframe
和Image
。
在另一个名为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;
}
答案 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;
}
}