Java:第二个窗口是空的
我有一个奇怪的问题......我是一个相对较新的“爱好者”的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问题并发,你正在试图做的秋千上事件长期运行的进程线程或EDT。由于此线程负责绘制所有组件并处理用户输入,因此如果它受到长时间运行的进程的束缚,则GUI将被有效冻结,直到该进程完成。关键是使用后台线程(如SwingWorker提供的后台线程)来处理长时间运行的进程,这样事件线程就不会被锁定。查看Concurrency in Swing了解更多信息。另请查看JProgressBar Tutorial了解有关如何使用进度条与后台线程的其他见解。
此外,您不希望使用JFrame,其中对话框(如JDialog)更合适。此外,您还需要避免在Swing中使用KeyListeners。更好的做法是简单地将ActionListener添加到JTextField中,因为它的默认行为是响应按键。
哦,欢迎来到StackOverflow.com!
+1我同意!有一个相关示例[这里](http://stackoverflow.com/a/4637725/230513)。 – trashgod 2012-02-04 01:28:32
是的,还有另一个相关的例子[这里](http://stackoverflow.com/questions/8251607/running-a-jframe-with-a-jprogressbar/8251620#8251620)。 – 2012-02-04 03:07:58
很难说没有代码,但可能是一个Swing线程问题,特别是如果在Swing线程上执行长时间运行的任务:http://java.sun.com/products/jfc/tsc/articles /threads/threads1.html – DNA 2012-02-03 22:29:57