2012-03-06 21 views
1

我正在製作基於EJB 3技術的Swing數據庫應用程序。我正在使用Netbeans 7.0.1。當程序啓動時它是從數據庫中獲取的所有數據:EJB 3&Swing:如何提高GUI響應能力?

private javax.persistence.Query spareQuery; 
    private java.util.List<Spares> spareList; 
    ... 
    spareQuery = entityManager.createQuery("SELECT s FROM Spares s ORDER BY s.id"); 
    spareList = org.jdesktop.observablecollections.ObservableCollections. 
       observableList(spareQuery.getResultList()); 

抓取所有的數據從數據庫導致顯著暫停在啓動過程中。 現在,我需要javax.persistence.Query接口的包裝,這將做到以下幾點:

  1. 初始化:

    spareQuery = entityManager.createQuery("SELECT s FROM Spares s ORDER BY s.id"); 
    spareQuery = new MyQueryWrapper (spareQuery); 
    
  2. 主要部分!之後,當這家名爲:

    spareList = org.jdesktop.observablecollections.ObservableCollections. 
          observableList(spareQuery.getResultList()); 
    

而不是等待所有數據從服務器接收,Query實例應查詢拆分成塊,以後每塊檢索的數據添加到列表(如列表是可觀察的,數據的每一部分將出現在相關的JTable)。因此,我們將有輕鬆快速的啓動。

因此,工作的邏輯應該是這樣的:

  1. SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 1 and 20
  2. 將數據添加到列表中。
  3. ...
  4. SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 80 and 100
  5. 數據添加到列表中。

問題:是否有可替代(套)EntityManagerQuery或別的東西來實現軟異步數據從數據庫中使用EJB3技術獲取任何圖書館?

回答

1

爲什麼你需要一個庫。只需在另一個線程中啓動EntityManager實例和查詢執行,然後在Swing線程可用時返回值。你可以使用Swing WorkerExecutorService來實現這一點,但對於這樣一個簡單的任務,你可能更好的是用一個回調啓動一個線程。

+0

我知道'SwingWorker',這是目前列表中的第一個解決方案。 但我的問題是,是否有圖書館以這篇文章中描述的方式進行事情? – Exterminator13 2012-03-06 13:06:19