2016-10-12 9 views
0

ログインパネルとGUIパネルの2つのクラスがあります。以下のコードでは、ログインすると自分のGUIが表示され、ログインが非表示になることを示しています。そして、しばらくしてログアウトボタンがクリックされたときにログインパネルを再度呼び出さなければなりません。下のコードは、StackOverFlowエラーを引き起こします。私はそのエラーが何を意味するのか知っていますが、私はそれをどのように修正できるか分かりません。 "別のクラス"が呼び出されたクラスで何かを呼び出さなければならないときに、別のクラスからそのようなメソッドを呼び出すためのよりよい解決法はありますか?どのようにして、クラスはメソッドを互いに呼び出すことができますか?

//Login Panel 
public class MyPanel1 extends JFrame implements ActionListener{ 
    MyPanel2 p2 = new MyPanel2(); 
    . 
    . 
    public void actionPerformed(ActionEvent e){ 
      //if login is a success 
      setVisible(false); 
      p2.setVisible(true); 
    } 
} 


//GUI Panel 
public class MyPanel2 extends JFrame implements ActionListener{ 
    MyPanel1 p1 = new MyPanel1(); 
    . 
    . 
    public void actionPerformed(ActionEvent e){ 
      //if logout button is clicked 
      setVisible(false); 
      p1.setVisible(true); 
    } 
} 


私のスタックトレース:

Exception in thread "main" java.lang.StackOverflowError 
    at sun.awt.Win32GraphicsConfig.getBounds(Native Method) 
    at sun.awt.Win32GraphicsConfig.getBounds(Win32GraphicsConfig.java:222) 
    at java.awt.Window.init(Window.java:505) 
    at java.awt.Window.<init>(Window.java:537) 
    at java.awt.Frame.<init>(Frame.java:420) 
    at java.awt.Frame.<init>(Frame.java:385) 
    at javax.swing.JFrame.<init>(JFrame.java:189) 
    at Login.<init>(Login.java:29) 
    at Cashier.<init>(Cashier.java:10) 
    at Login.<init>(Login.java:9) 
    at Cashier.<init>(Cashier.java:10) 
    at Login.<init>(Login.java:9) 
    at Cashier.<init>(Cashier.java:10) 
    at Login.<init>(Login.java:9) 
+0

このような循環的な依存関係を回避する必要があります...代わりにコールバックについてgoogle! –

+0

あなたのスタックトレースを投稿できますか? –

+0

私の編集したポストを参照してください – ryannjeffers

答えて

0

は、第二パネルのコンストラクタへの最初のパネルの参照を渡します。

//Login Panel 
public class MyPanel1 extends JFrame implements ActionListener{ 
    MyPanel2 p2 = new MyPanel2(this); 
    . 
    . 
    public void actionPerformed(ActionEvent e){ 
     //if login is a success 
     setVisible(false); 
     p2.setVisible(true); 
    } 
} 

//GUI Panel 
public class MyPanel2 extends JFrame implements ActionListener{ 
    MyPanel1 p1; 
    public MyPanel2(MyPanel1 parent){ 
     this.p1 = parent; 
    } 
    public void actionPerformed(ActionEvent e){ 
     //if logout button is clicked 
     setVisible(false); 
     p1.setVisible(true); 
    } 
} 
+0

さらにこれを説明できますか?私はかなりかなり混乱していますが、私はそのアイデアを得ています。 OOPはまだ私には新しいものです。 – ryannjeffers

+0

@Wingzeroには、あなたが理解していない具体的なものは何ですか?私はあなたが知りたいことを説明し、知っていることがそれほど簡単ではないと私は分かりません。 – Turamarth

関連する問題