Java Swing应用程序问题

Java Swing应用程序问题,java,swing,swingworker,Java,Swing,Swingworker,我正在开发Swing应用程序,通常一切正常。但是我有一个GUI问题 当我运行应用程序时,例如最小化其他窗口时,我的应用程序仍在工作,但JFrame的中心部分不可见或隐藏。完成部分程序逻辑后,GUI将重新绘制并再次可见。这将继续,直到程序完成运行 是否有防止这种行为的API,或强制GUI可见的类,或添加一些进度条 如果有人需要这些信息,我将在Windows Vista上使用java 1.6进行测试。我觉得您正在进行某种缓慢的IO或计算,这会导致GUI变得无响应 您需要做的是在另一个线程中执行长时间

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

当我运行应用程序时,例如最小化其他窗口时,我的应用程序仍在工作,但
JFrame
的中心部分不可见或隐藏。完成部分程序逻辑后,GUI将重新绘制并再次可见。这将继续,直到程序完成运行

是否有防止这种行为的API,或强制GUI可见的类,或添加一些进度条


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

我觉得您正在进行某种缓慢的IO或计算,这会导致GUI变得无响应

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

这样做的标准方法是通过一个类

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

这与另一个我认为可能类似的问题有关


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

就像jinguy说的那样,您很可能正在执行一项需要很长时间才能完成的任务,并且需要放在后台线程中。有关如何正确执行此操作的更多信息,请参阅Java Sun教程。

您似乎需要在单独的线程中执行长期运行的业务操作。我建议你使用一种新的方法


检查这一点很简单。

在某些情况下,当窗口下的窗口区域变脏时,Swing会忘记重新喷漆。每隔几秒钟运行一次Swing计时器,并向窗口发出重新绘制()命令。当窗口重新激活(恢复焦点)时,默认情况下它将重新绘制自身。添加计时器可能会有所帮助,但如果线程被阻塞,GUI无法重新绘制自身。我的案例不涉及任何EDT阻塞操作。我猜这与底层d3d管道的某些“属性”有关。