2013-01-15 45 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服务器为了使用它们