2009-06-25 114 views
3

我正在开发Swing应用程序,并且通常一切正常。但是我有一个GUI问题。Swing应用程序问题

当我运行应用程序,例如最小化其他窗口时,我的应用程序仍在工作,但JFrame的中心部分是隐藏或隐藏的。完成程序逻辑的某些部分后,GUI将重新绘制并再次显示。这将持续到程序结束运行。

是否有任何API用于防止此行为,或者某些类用于强制GUI可见,或者可能添加一些进度条?

如果有人需要这些信息,我在Windows Vista上测试这个,用java 1.6。

回答

9

这听起来像你正在做某种缓慢的IO或计算导致您的GUI变得无法响应。

您需要做的是在另一个线程中执行长时间运行的进程。

这样做的标准方法是使用SwingWorker类。

Java tutorials有一些很好的资源和教程,关于如何正确使用SwingWorker

Herehere是我认为可能类似的另一个问题的链接。

您看到的这种行为是由于您的长时间运行的进程阻塞了GUI用于重新绘制自己的线程的结果。因此,当您的任务正在执行时,GUI无法重新绘制您的JFrame,并且它变得无响应。

+0

有些情况下,当窗口区域在Windows下变脏时,Swing会忘记自己重新绘制。每隔几秒钟运行一次Swing Timer,并向窗口发出repaint()。 – akarnokd 2009-06-25 13:07:01

2

就像jinguy说你最有可能做一项需要很长时间才能完成的任务,需要放在后台线程中。查看Java Sun Concurrency in Swing教程,了解有关如何正确执行此操作的更多信息。

2

看来你需要在一个单独的线程中执行长时间运行的业务操作。我建议你使用SwingWorker

检查这个简单的example