2013-07-24 75 views
0

美好的一天,我想在的Java Swing在新線程打開的選項卡,使一下子就不得不運行耗時的任務標籤之間切換的機會。試了一下,標籤的副本實現Runnable接口,而是一個新的線程是無效的(在調試器它開始懸掛約1秒,被殺害),按我的理解構造工作了,和的所有內容擺動位於其主要流動中。我讀過SwingWorker,但不太瞭解如何將其應用於我的問題。如果可以的話,請舉個例子。提前致謝。JTabbedPane的+多線程:在一個新的線程打開選項卡

P.S.這是網絡應用程序,「加載」將用作服務器的工作。換句話說,就是讓用戶能夠在選項卡之間切換,直到當前選項卡成爲連接。

+4

看到的SwingWorker,Runnable接口#主題爲重定向所有的長/重碼工人線程 – mKorbel

+3

所有Swing代碼必須在單個線程執行 - 在EDT。 「在新線程中打開標籤」絕不會發生。然而,你可以通過mKorbel建議的不同線索做好準備。 – predi

+0

我不太清楚如何將代碼拆分成計算和圖形部分。假設在偵聽器方法中有一個調用服務器的按鈕。我如何從另一個線程(不是EDT)中的偵聽器調用此方法? – 0xDEADBEEF

回答

1

你應該儘量分開,做從代碼指定GUI的實際工作中的代碼。您應該搜索例如用於模型 - 視圖 - 控制器 - 模式(MVC)。

這種方式,GUI代碼可以擺動/ AWT的事件調度線程(EDT)內運行它是如何或多或少inteded。執行實際工作的代碼應儘可能獨立於GUI。現在您可以選擇在專用線程中運行它,或者選擇適合您的整體應用程序體系結構。

最後一部分是金屬絲這兩種(GUI和域邏輯)一起,使得GUI觸發工人代碼或工人代碼觸發GUI更新,或任何滿足要求的工作流程。

相關問題