从(大)文本文件填充ComboBox

时间:2013-01-15 22:15:02

标签: java swing jcombobox bufferedreader event-dispatch-thread

我正在创建一个个人电影数据库,我希望用IMDB填充一个带有电影标题的组合框,IMDB在文本文件中发布这些信息,所以我试图从这些文本文件中填充它。我有它的工作,但由于文本文件非常大,几乎80 000行,每行都有标题......它需要很长时间来加载。

这可能是错误的做法,有人知道如何解决或我应该做什么?

用于读取文件并返回组合框的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 个答案:

答案 0 :(得分:2)

您遇到的问题是阻止事件调度线程,这将使您的应用程序在文件开始读取时停止运行。您永远不应该在EDT中执行耗时或阻止操作。

您需要将加载卸载到后台线程并在其中加载列表,然后将值重新同步回EDT(您不应该创建或修改EDT外的任何UI元素)

看看Concurrency in Swing。在您的情况下,我建议您查看SwingWorker,因为它旨在满足您的实际需求。

文件I / O可能会慢慢满足您的需求,我建议您考虑将文本文件加载到SQL样式数据库中,这样可以提供更快的结果。

我建议查看HyperSQLH2这两个纯Java SQL数据库都是小而轻的,但也可以在单用户模式下运行,这意味着你不需要安装一个完全成熟的SQL服务器以便使用它们