有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从(大)文本文件填充JComboBox

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

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

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

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) 个答案

  1. # 1 楼答案

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

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

    看看Concurrency in Swing。在你的情况下,我建议看一下SwingWorker,因为它是为了满足你的实际需求而设计的

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

    我建议看一下HyperSQLH2,它们都是纯Java SQL数据库,设计为小而轻,但也以单用户模式运行,这意味着不需要安装成熟的SQL server即可使用它们