私は奇妙な問題を抱えています... 私は比較的新しい「熱狂的な」Java プログラマー (以前のキャリアでは Perl をハッキングして生計を立てていました) で、最初の半現実的なアプリケーションに取り組んでいます。「Main-Class」は、インスタンスMyAppを作成するクラスです。UserInputDialog
UserInputDialogは、私が作成したクラスでextendあり、 をJFrame実装ActionListenerしKeyListener、 を使用し、 、、および Cancel/OK をFlowLayoutユーザーに提示します。が whereを生成するとき、または "OK"が を生成するとき、いくつかの入力検証を行い、 を呼び出し、次に を呼び出します。JLabelJTextFieldJButtonJTextFieldKeyEventkeyReleased() == KeyEvent.VK_ENTERJButtonActionEventUserInputDialogsetVisible(false)MyApp.doSomething( JTextFieldInstance.getText() )
それはすべて完璧に機能します。しかし、完了するまでにかなりの時間がかかる場合があるためMyApp、進行状況ウィンドウを に追加しようとしています。doSomething()
を拡張し、 を使用し、 in をトスするProgressWindowクラスを作成しました。と(ラップ) で。. テストデータからインスタンス化してフィードすると、完全に機能します。ループのテストをにコピーアンドペーストし、インスタンス化していない場合にも問題なく動作します(つまり、この動作を引き起こしている固有のものは何もありません。私が理解していない何らかの相互作用のようです。および)。JFrameBorderLayoutJProgressBarNORTHJScrollPaneJTextAreaCENTERProgressWindowProgressWindowTesterProgressWindowTesterMyAppMyAppUserInputDialogMyAppUserInputDialogProgressWindow
しかし、意図ProgressWindowしたとおりに使用しようとするMyAppと、つまりProgressWindowsetVisible(true) を使用すると、空白の Swing ウィンドウが表示されます (適切なサイズで、タイトル バーが適切に設定されています)。およびコンポーネントは表示さJProgressBarれJScrollPane / JTextAreaません。ProgressWindowメソッドは適切に呼び出されていますMyApp(System.err.println()メッセージは適切な相互作用を示しています) ProgressWindow。
コード スニペットを投稿することはできますが、ちょっと複雑で、おそらく明らかな何かが欠けているだけです...
UI とビジネス ロジックを一般的に分離するという概念には精通していますが (たとえば、 Perl アプリケーションを構築するときにHTML::TemplateandClass::DBIとを使用しCGI::Applicationました)、Java で「正しく行っている」かどうかはわかりません...
前もって感謝します!
ああ、コードを試した 2 つの環境でまったく同じ動作が得られます。Fedora 15 Linux ディストリビューション、カーネル 2.6.31.10-3、LXDE デスクトップ環境の javac 1.7.0_02[1]。
[1] oracle.com から直接ダウンロード。私; OpenJDK (JDK 7 が OpenJDK に基づいていることは知っています) や gcj などは使用していません。