状況:メインフォームは、特定のクラスのインスタンスを作成または変更するためのパラメータが入力されるテキストボックスを持つモーダルjDialogを呼び出します。disposeメソッドの呼び出し後にモーダルダイアログ変数にアクセスする
ダイアログが既存のインスタンスを変更する必要がある場合、ダイアログはパラメータとしてコンストラクタに渡されます。それ以外の場合、jDialogはClassAの新しいインスタンスを作成します。
問題:メインフォームはその新しいインスタンスにアクセスする必要があります。メインフォーム全体をパラメータとして渡し、メソッド呼び出しでダイアログに新しいインスタンスをプッシュさせるのは汚れたコードだと思います完全に再利用可能なスタンドアロンのダイアログは、新しいインスタンスを受け取るために特定のクラス名とメソッドを必要とする単一のメインフォームでのみ使用できます。
OKボタンをクリックした後、getClassAInstance()メソッド(既存のインスタンスが変更されているときにも呼び出すことができる)を呼び出すことによって、メインフォームがjdialogから新しいインスタンスを取得するようにすることははるかに論理的です。このメソッドは、問題のjdialogの新しいインスタンスに対して "setVisible(true)"メソッドの後に呼び出されます。ダイアログが現れます。メインフォームのスレッドは、モーダルであるためダイアログが閉じられるまでスリープします。 OKボタンはjDialogのdispose()メソッドを呼び出し、次に非常に次のステートメントはメインフォームによるjDialogのgetClassAInstance()呼び出しです。
はここ
ClassAInstanceMakerDialog imd = new ClassAInstanceMakerDialog(this, true);
imd.setVisible(true);
//imd.dispose(); after OK button click
System.out.println(imd.getClassAInstance()); //return a new ClassA instance
//output: whatever ClassA.toString() should return, works fine
..質問のコードでも同じことだ:私はそれを試してみたし、完全に正常に動作するようです。しかし、それは良いコードですか? getClassAInstance()メソッドが "null"を返す危険はありますか?ガベージコレクタはjDialogが破棄された後、メインフォームがコールを完了する前にClassAインスタンスを収集したためですか?
私が自分自身を明確にしなかった場合、私は英語のネイティブスピーカーではありません。むしろいくつかのコードが表示される場合は、私に教えてください...
あなたの英語はうまく構成されており、あなたの質問はうまく構築されています。 –