2011-05-03 47 views
1

我有一個JButton,當我點擊它,我從數據庫加載一些數據初始化+一個JDialog有許多控制+填充這些控件與加載數據,則表明緩慢的JDialog。這需要大約3到5秒才能最終顯示JDialog,這會導致程序以不良方式凍結。如何在Event dispatch線程中同時運行兩個組件?

我創建了一個小型的JDialog從SwingX一個JXBusyLabel顯示在加載和初始化等過程緩慢忙碌的標籤。但是如何在初始化慢速對話框時在EDT中運行這個繁忙的標籤JDialog?

注:從數據庫加載數據不慢,但初始化重的JDialog及其部件造成慢處理。

+2

不應該發生......粗略地說有多少種控制?你能否展示一段代碼片段,演示如何構建/填充緩慢的對話框? – kleopatra 2011-05-03 13:52:00

+0

@kleopatra:它實際上會在3到5秒內凍結。我在這個問題中編輯了這個。 JDialog包含一個帶有7個選項卡的JTabbedPane +一些JLabel,每個選項卡內的JButton以及一些來自SwingX的JXColorSelectionButton ...我猜顏色按鈕會導致性能下降。 – Brad 2011-05-03 14:27:56

+0

猜測是不夠的;-)如果你確定它是colorSelectionButton,請在swingx問題跟蹤器中提交問題(最好帶有一個小的可運行示例,以便我們可以重現它) – kleopatra 2011-05-03 14:31:35

回答

5
  1. 顯示忙對話框。

  2. 開始SwingWorker,並盡一切長時間運行的任務在後臺(數據庫)

  3. 完成後,創建與數據庫中的數據(內SwingWorker.done(法))

  4. 隱藏大對話框忙碌的對話框,顯示大對話。

+0

我已經做了,會出現忙標籤對話框但冷凍(繁忙的標籤不運行),直至出現大的對話框! – Brad 2011-05-03 13:45:19

+0

你是否在後臺線程中運行數據庫操作?你應該把這個代碼裏'SwingWorker.doInBackground()'方法 – 2011-05-03 16:18:32

+0

您可以添加的PropertyChangeListener()來的SwingWorker – mKorbel 2011-05-03 16:38:09

0

你應該更好地利用的SwingWorker:

  1. 創建忙標籤對話框,創建擺動工人
  2. 啓動SwingWorker類(它會異步地從數據庫加載數據,主備控制對話框)在SwingWorker類的有()方法
  3. ,隱藏你的第一個小對話框並顯示主要的一個