我有一个奇怪的问题......我是一个相对较新的“爱好者”的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