我有一個奇怪的問題......我是一個相對較新的「愛好者」的Java程序員(我曾經在以前的職業生涯中攻擊Perl)真正的應用。 「主要類」是MyApp
類,它創建了一個UserInputDialog
實例。Java:第二個窗口是空的
UserInputDialog
是一類我寫的extend
小號JFrame
,實現ActionListener
和KeyListener
,使用FlowLayout
,並呈現給用戶一個JLabel
,JTextField
,並取消/ OK JButton
秒。當JTextField
生成KeyEvent
,其中keyReleased() == KeyEvent.VK_ENTER
或者當「OK」JButton
生成ActionEvent
時,UserInputDialog
進行一些輸入驗證,調用setVisible(false)
,然後調用MyApp.doSomething(JTextFieldInstance.getText())
。
這一切都完美的作品。但是現在我正試圖將一個進度窗口添加到MyApp
,因爲doSomething()
偶爾會花費相當長的時間來完成。
我創建ProgressWindow
類,它擴展JFrame
,使用BorderLayout
,並扔在JProgressBar
。 NORTH
和JScrollPane
(包裝JTextArea
)。 CENTER
。當從ProgressWindowTester
實例化並饋送測試數據時,ProgressWindow
完美工作。它也能正常工作,如果我複製並粘貼從ProgressWindowTester
循環考不上MyApp
並沒有MyApp
實例化UserInputDialog
(即沒有什麼固有在MyApp
是造成這種行爲,這似乎是某種互動我不明白,在UserInputDialog
和ProgressWindow
之間)。
但是當我嘗試在MyApp
使用ProgressWindow
如預期,即ProgressWindow
調用setVisible(真),我得到了一個空白的Swing窗口(在適當的大小,並與標題欄設置不當)。不出現JProgressBar
和JScrollPane/JTextArea
組件。通過MyApp
正確調用ProgressWindow
方法(System.err.println()
消息顯示正確的交互),一切似乎都正常工作,只是,應在ProgressWindow
中顯示的組件不是。
我可以張貼代碼片段,但它是一種令人費解,而且我可能只是缺少明顯的東西...
我所熟悉的一般分離UI和業務邏輯(概念如我使用HTML::Template
和Class::DBI
和CGI::Application
時,構建Perl應用程序),但我不知道我在Java中「做對了」...
在此先感謝!
噢,我在兩種環境下的測試完全一樣:Mac OS X 10.6.8(「Snow Leopard」)上的javac 1.6.0_29;和Fedora 15 Linux發行版,內核2.6.31.10-3,LXDE桌面環境中的javac 1.7.0_02 [1]。
[1]直接從oracle.com下載;我; M不使用的OpenJDK(我知道JDK 7基於OpenJDK)或GCJ或類似的東西
很難說沒有代碼,但可能是一個Swing線程問題,特別是如果在Swing線程上執行長時間運行的任務:http://java.sun.com/products/jfc/tsc/articles /threads/threads1.html – DNA 2012-02-03 22:29:57