2017-07-07 75 views
0

我創建了兩個類。在每個類中定義兩個不同類的對象

一類叫做Frames,裏面我定義了一個Jframe和一個Image

在另一個稱爲​​的類中,我定義了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

也許,在你的'Panels'類'setImage'方法,並從'Frame'類將它傳遞的圖像......這一切都那種錯綜複雜的,如果你問我 – MadProgrammer

+0

似乎是錯誤的由他們互相調用,直到內存用完 - 在沒有提供任何代碼的情況下很難提供幫助。 – AscendedKitten

回答

0

所以我創建了一個Frames對象內部​​類調​​用getImage(),創造了​​對象內部Frames類調​​用getPanel()

所以你創建了一個相互遞歸。

解決方法:不要。下定決心,並堅持下去。

0

你的情況,你正在建設一個無限遞歸,這導致了計算器...

我認爲得到這個工作,最簡單的方法是實例class 2class 1,然後傳遞的對象class 1class 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; 
    } 
} 
相關問題