我正在开发Swing应用程序,一切正常。但我有一个GUI问题。
当我运行应用程序时,例如最小化其他窗口时,我的应用程序仍在工作,但JFrame
的核心部分是不可见或隐藏的。完成程序逻辑的某些部分后,GUI重新绘制并再次可见。这将一直持续到程序运行完毕。
是否有用于阻止此行为的API,或用于强制GUI可见的某些类,或者是否可以添加一些进度条?
如果有人需要这些信息,我在Windows Vista上使用java 1.6进行测试。
答案 0 :(得分:9)
听起来,我正在做一些缓慢的IO或计算,导致GUI无法响应。
您需要做的是在另一个线程中执行长时间运行的进程。
标准的方法是使用SwingWorker
类。
Java tutorials有一些很好的资源和教程,介绍如何正确使用SwingWorker
。
您看到的这种行为是您长时间运行的进程阻止GUI用于重绘自身的线程的结果。因此,当您的任务正在执行时,GUI无法重新绘制您的JFrame
并且它变得无法响应。
答案 1 :(得分:2)
就像jinguy所说,你最有可能完成一项需要很长时间才能完成的任务,并且需要放在后台线程中。有关如何正确执行此操作的详细信息,请查看Java Sun Concurrency in Swing教程。
答案 2 :(得分:2)
您似乎需要在单独的线程中执行长时间运行的业务操作。我建议你使用SwingWorker
。
检查这个简单的example。