我有一个奇怪的问题......我是一个相对较新的“狂热”Java 程序员(我以前的职业生涯中曾经以黑客 Perl 为生),正在开发我的第一个半真实应用程序。“Main-Class”是MyApp
创建UserInputDialog
实例的类。
UserInputDialog
extend
是我编写的一个类JFrame
,它实现了ActionListener
and KeyListener
,使用FlowLayout
了 ,并向用户展示了JLabel
,JTextField
和 Cancel/OK JButton
s。当JTextField
生成KeyEvent
wherekeyReleased() == KeyEvent.VK_ENTER
或“OK”JButton
生成时ActionEvent
,进行UserInputDialog
一些输入验证,调用setVisible(false)
,然后调用MyApp.doSomething( JTextFieldInstance.getText() )
。
这一切都完美无缺。但现在我正在尝试向 中添加进度窗口MyApp
,因为doSomething()
有时可能需要相当长的时间才能完成。
我创建了一个ProgressWindow
类,它扩展JFrame
、使用BorderLayout
和抛出一个JProgressBar
in 。NORTH
和 a JScrollPane
(包装 a 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 中“做对了”......
提前致谢!
哦,在我尝试过代码的两个环境中,我得到了完全相同的行为:Mac OS X 10.6.8 上的 javac 1.6.0_29 ("Snow Leopard");以及 Fedora 15 Linux 发行版、内核 2.6.31.10-3、LXDE 桌面环境上的 javac 1.7.0_02[1]。
[1] 直接从oracle.com下载;我没有使用 OpenJDK(我知道 JDK 7 基于 OpenJDK)或 gcj 或类似的东西