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 楼答案
您遇到的问题是阻塞了事件调度线程,这将使您的应用程序在开始读取文件时停止运行。绝不能在EDT中执行耗时或阻塞操作
您需要将加载卸载到后台线程并在那里加载列表,然后将值重新同步回EDT(您不应该在EDT之外创建或修改任何UI元素)
看看Concurrency in Swing。在你的情况下,我建议看一下SwingWorker,因为它是为了满足你的实际需求而设计的
根据您的需要,文件I/O可能会变慢,我建议您考虑将文本文件加载到SQL样式的数据库中,这样可能会得到更快的结果
我建议看一下HyperSQL或H2,它们都是纯Java SQL数据库,设计为小而轻,但也以单用户模式运行,这意味着不需要安装成熟的SQL server即可使用它们