2013-01-15 74 views
1

我創建個人電影數據庫thingy,我想從IMDB填充電影標題組合框,IMDB在文本文件中發佈此信息,所以我試圖從它填充它那些文本文件。我得到它的工作,但由於文本文件非常大,幾乎80 000行在每一行的標題......它需要很長的時間來加載。從(大)TextFile填充JComboBox

這可能是這樣做的錯誤方式,有人知道如何解決它或我應該做什麼?

讀取該文件,並返回代碼的String []組合框

public String [] getMoviesFromFile() throws IOException{ 

    BufferedReader input = new BufferedReader(new FileReader(filePath)); 
    try { 
     String line = null; 
     while ((line = input.readLine()) != null){ 
      strings.add(line); 

       } 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    finally { 
     input.close(); 
    } 

    String[] lineArray = strings.toArray(new String[]{}); 
    return lineArray; 

} 
+1

您確定要在cobmo盒中填充80,000行嗎? – Nivas

+0

它的自動建議組合框,所以無論何時輸入匹配的建議將顯示,有點像谷歌搜索 – Fredkr

回答

2

你有被你擋住了事件指派線程,這將使你的應用程序中的問題來嘎然而止,而該文件開始讀取。您絕不應該在美國東部時間執行耗時或阻止操作。

您需要加載關閉加載到一個後臺線程並加載列表中出現,然後重新同步的值回EDT(你永遠不應該創建或修改任何UI元素了EDT的一側)

看看Concurrency in Swing。在你的情況,我建議看看SwingWorker,因爲它的設計是爲了滿足你的實際需求。

文件I/O可能會降低您的需求,我可能會建議您查看將文本文件加載到SQL樣式數據庫中,這可能會提供更快的結果。

我建議看HyperSQLH2這兩者都是純Java SQL數據庫設計小巧輕便,但在單用戶模式也跑,這意味着你不需要安裝一個完全成熟的SQL服務器爲了使用它們