2017-08-13 10 views
1

私は概念的な質問があります(いくつかの質問があります) 実際のプロジェクトで説明しましょう。 私はLoginswingのフォームを持っていますが、メインの方法があり、ここからアプリケーションが始まります。別のクラスのメソッドとフィールドを別のクラスの中で使用する

java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new Login().setVisible(true); 
     } 
    }); // this method is inside main Method 

Loginフォームは、いくつかのTextField sおよびButton Sが含まれており、またいくつかのmethods。 (たとえば、Enterボタンを押すと認証とアクションが実行されます) [Enter]ボタンを押すと、認証が成功するとMainTabbedFormという別のフォームが表示されます。 今質問はObject Oriented Programmingとクラスローディングについてです。 LoginフォームフォームMainTabbedFormにアクセスします。たとえば、disposeLoginフォームを認証した後、MainTabbedFormコンストラクタで正常に処理したいと思っています。 Loginクラスの中にメソッドを書き込んで、MainTabbedFormにログインを接続します。このように:

public void disappearForm(MainTabbedForm form) { 
this.form=form; // I already has defined a MainTabbedForm field in top of the Login class 
this.dispose(); // Dispose the Login class 
} 

そしてMainTabbedFormのフィールドとしてログインフォームを宣言するだけで使用する前に、MainTabbedFormのコンストラクタでそれを使用します。

public MainTabbedForm(Login login) { 
    this.login=login; 
    login.disappearForm(this) 
} 

しかし、ログインが初期化されていないため、NullPointExceptionが返されます。 そして、私が新しいクラスのLoginを作成した場合、もちろん、それは新しいクラスであり、私が望むことはしません。なぜなら、新しいインスタンスであり、最初のメソッドではなく、メインメソッドのです。 今、私は質問があります。どうすればこれら2つのクラスをお互いに結びつけることができますか? もちろん私の仕事をする静的な方法を作ることができます!しかし、私はこのようにしたくありません。 私はこのクラスの読み込みと、OSGiMVCのようなフレームワークとデザインパターンをプログラミングしているので、サービスやオブジェクトなどの動的なロードとアクセスを管理するために作成したと思います。 これらの回答への返信は本当に感謝しています!あなたはLogin

+0

をあなたは 'MainTabbedForm'から')( '処分呼びたいのはなぜ? 'MainTabbedForm'はどのように作成していますか?なぜそれは 'disappearForm()'メソッドに*自体*への参照も渡すのですか? – David

答えて

0

を行うことができます:

MainTabbedForm mtf = MainTabbedForm(); //create 
//set the required information using setters 
//for example set userName which is defined in Login to MainTabbedForm 
mtf.setUserName(this.userName); 
//.... 
this.dispose(); //when no longer needed 
関連する問題