我正在创建一个个人电影数据库,我希望用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;
}
答案 0 :(得分:2)
您遇到的问题是阻止事件调度线程,这将使您的应用程序在文件开始读取时停止运行。您永远不应该在EDT中执行耗时或阻止操作。
您需要将加载卸载到后台线程并在其中加载列表,然后将值重新同步回EDT(您不应该创建或修改EDT外的任何UI元素)
看看Concurrency in Swing。在您的情况下,我建议您查看SwingWorker,因为它旨在满足您的实际需求。
文件I / O可能会慢慢满足您的需求,我建议您考虑将文本文件加载到SQL样式数据库中,这样可以提供更快的结果。
我建议查看HyperSQL或H2这两个纯Java SQL数据库都是小而轻的,但也可以在单用户模式下运行,这意味着你不需要安装一个完全成熟的SQL服务器以便使用它们