1

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

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

读取文件并返回组合框的字符串 [] 的代码

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;

}
4

1 回答 1

2

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

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

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

文件 I/O 可能会因您的需要而变慢,我可能建议您考虑将文本文件加载到 SQL 样式数据库中,这可能会产生更快的结果。

我建议查看HyperSQLH2,它们都是纯 Java SQL 数据库,设计小巧轻便,但也可以在单用户模式下运行,这意味着您无需安装成熟的 SQL 服务器即可使用它们

于 2013-01-15T22:39:14.083 回答