私は奇妙な問題を抱えています... 私は比較的新しい「熱狂的な」Java プログラマー (以前のキャリアでは Perl をハッキングして生計を立てていました) で、最初の半現実的なアプリケーションに取り組んでいます。「Main-Class」は、インスタンスMyApp
を作成するクラスです。UserInputDialog
UserInputDialog
は、私が作成したクラスでextend
あり、 をJFrame
実装ActionListener
しKeyListener
、 を使用し、 、、および Cancel/OK をFlowLayout
ユーザーに提示します。が whereを生成するとき、または "OK"が を生成するとき、いくつかの入力検証を行い、 を呼び出し、次に を呼び出します。JLabel
JTextField
JButton
JTextField
KeyEvent
keyReleased() == KeyEvent.VK_ENTER
JButton
ActionEvent
UserInputDialog
setVisible(false)
MyApp.doSomething( JTextFieldInstance.getText() )
それはすべて完璧に機能します。しかし、完了するまでにかなりの時間がかかる場合があるためMyApp
、進行状況ウィンドウを に追加しようとしています。doSomething()
を拡張し、 を使用し、 in をトスするProgressWindow
クラスを作成しました。と(ラップ) で。. テストデータからインスタンス化してフィードすると、完全に機能します。ループのテストをにコピーアンドペーストし、インスタンス化していない場合にも問題なく動作します(つまり、この動作を引き起こしている固有のものは何もありません。私が理解していない何らかの相互作用のようです。および)。JFrame
BorderLayout
JProgressBar
NORTH
JScrollPane
JTextArea
CENTER
ProgressWindow
ProgressWindowTester
ProgressWindowTester
MyApp
MyApp
UserInputDialog
MyApp
UserInputDialog
ProgressWindow
しかし、意図ProgressWindow
したとおりに使用しようとするMyApp
と、つまりProgressWindow
setVisible(true) を使用すると、空白の Swing ウィンドウが表示されます (適切なサイズで、タイトル バーが適切に設定されています)。およびコンポーネントは表示さJProgressBar
れJScrollPane / JTextArea
ません。ProgressWindow
メソッドは適切に呼び出されていますMyApp
(System.err.println()
メッセージは適切な相互作用を示しています) ProgressWindow
。
コード スニペットを投稿することはできますが、ちょっと複雑で、おそらく明らかな何かが欠けているだけです...
UI とビジネス ロジックを一般的に分離するという概念には精通していますが (たとえば、 Perl アプリケーションを構築するときにHTML::Template
andClass::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 などは使用していません。