2009-06-25 166 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