我已經構建了一個連接到數據庫的桌面應用程序,功能是添加 - 刪除 - 修改。我將它與3 JInternalFrame分開。如何實現一個線程到我的自制桌面應用程序
現在的問題是,當我執行批量更新來更新> 500個訂單時,我的應用程序將掛起,但它正在處理請求。然後我會再次運行這個應用程序,所以現在我有2個窗口打開相同的應用程序。第一個應用程序完成工作後,我可以再次使用以前的應用程序。
現在我的問題是,如何實現線程到我的應用程序,以便我可以在同一個窗口應用程序中運行多個功能?
我已經構建了一個連接到數據庫的桌面應用程序,功能是添加 - 刪除 - 修改。我將它與3 JInternalFrame分開。如何實現一個線程到我的自制桌面應用程序
現在的問題是,當我執行批量更新來更新> 500個訂單時,我的應用程序將掛起,但它正在處理請求。然後我會再次運行這個應用程序,所以現在我有2個窗口打開相同的應用程序。第一個應用程序完成工作後,我可以再次使用以前的應用程序。
現在我的問題是,如何實現線程到我的應用程序,以便我可以在同一個窗口應用程序中運行多個功能?
我只是用:
new Thread(new Runnable()
{
public void run()
{
//Things to do in new thread...
}
}).start();
或者,如果你想經常使用,可以使一個實現Runnable接口的類,所以你不必重寫一切都在run()函數中。
多線程Java中現在是很簡單的通過添加[java.util.concurrent.][1]
你需要做的是
對於線程池可以使用的
Executors.newFixedThreadPool or Executors.newCachedThreadPool()
一個你應該做的是從你的數據庫訪問和修改類獨立的UI類。然後,您可以從您的用戶界面,你可以調用像這樣:但是
new Thread(new Runnable()
{
public void run()
{
//Call database stuff here
}
}).start();
注意,即具有在同一時間去了很多數據庫操作可能導致錯誤特別是因爲數據庫可能會鎖定表到它正在閱讀/寫入。我建議你一次只保留一個操作,並使用線程來顯示選取框進度條或類似的東西。
長時間運行的任務(如批量更新)不能在事件調度線程來完成(其中所有的GUI操作由線程),否則,當你觀察到的,GUI凍結。
使用SwingWorker在後臺線程中執行長時間運行的任務。它的javadoc有一個有用的例子,其中也描述了Swing tutorial。
Hi HB Nizet,感謝您的建議。讀完教程後,如何製作初始線程,事件分派線程或工作線程? – lagunaloire
如果您還沒有從教程中瞭解這一點,請重新閱讀它。初始線程是執行主方法的主線程。 EDT是調用SwingUtilities.invokeLater(...)從主方法創建並顯示GUI時自動創建的線程。工作線程是SwingWorker爲您創建的工作線程。仔細閱讀** **。 –
是的,你說我沒有仔細閱讀它......好吧,讓我更多地挖掘它。 – lagunaloire
嗨npinti,感謝您的回覆,我想我會去JB Nizet建議,因爲當我讀到關於擺動併發,我覺得我沒有履行這一規則。因此,當我執行長時間任務時,我的應用程序被凍結。 – lagunaloire