我正在开发Swing应用程序,并且通常一切正常。但是我有一个GUI问题。Swing应用程序问题
当我运行应用程序,例如最小化其他窗口时,我的应用程序仍在工作,但JFrame
的中心部分是隐藏或隐藏的。完成程序逻辑的某些部分后,GUI将重新绘制并再次显示。这将持续到程序结束运行。
是否有任何API用于防止此行为,或者某些类用于强制GUI可见,或者可能添加一些进度条?
如果有人需要这些信息,我在Windows Vista上测试这个,用java 1.6。
我正在开发Swing应用程序,并且通常一切正常。但是我有一个GUI问题。Swing应用程序问题
当我运行应用程序,例如最小化其他窗口时,我的应用程序仍在工作,但JFrame
的中心部分是隐藏或隐藏的。完成程序逻辑的某些部分后,GUI将重新绘制并再次显示。这将持续到程序结束运行。
是否有任何API用于防止此行为,或者某些类用于强制GUI可见,或者可能添加一些进度条?
如果有人需要这些信息,我在Windows Vista上测试这个,用java 1.6。
这听起来像你正在做某种缓慢的IO或计算导致您的GUI变得无法响应。
您需要做的是在另一个线程中执行长时间运行的进程。
这样做的标准方法是使用SwingWorker
类。
Java tutorials有一些很好的资源和教程,关于如何正确使用SwingWorker
。
您看到的这种行为是由于您的长时间运行的进程阻塞了GUI用于重新绘制自己的线程的结果。因此,当您的任务正在执行时,GUI无法重新绘制您的JFrame
,并且它变得无响应。
就像jinguy说你最有可能做一项需要很长时间才能完成的任务,需要放在后台线程中。查看Java Sun Concurrency in Swing教程,了解有关如何正确执行此操作的更多信息。
看来你需要在一个单独的线程中执行长时间运行的业务操作。我建议你使用SwingWorker
。
检查这个简单的example。
有些情况下,当窗口区域在Windows下变脏时,Swing会忘记自己重新绘制。每隔几秒钟运行一次Swing Timer,并向窗口发出repaint()。 – akarnokd 2009-06-25 13:07:01