1

私は個人的な映画データベースを作成していて、コンボボックスにIMDBからの映画のタイトルを入力したいのですが、IMDBはこの情報をテキストファイルでリリースするので、それらのテキストファイルから入力しようとしています。私はそれを機能させましたが、テキストファイルは非常に大きいので、すべての行にタイトルが付いたほぼ80000行です...ロードには時間がかかります。

これはこれを行うための間違った方法かもしれません、誰かがそれを解決する方法または私が何をすべきかを知っていますか?

ファイルを読み取り、コンボボックスの文字列[]を返すためのコード

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スタイルのデータベースにロードすることを検討することをお勧めします。これにより、結果が速くなる可能性があります。

HyperSQLまたはH2は、どちらも小型で軽量に設計された純粋なJava SQLデータベースですが、シングルユーザーモードでも実行されるため、使用するために本格的なSQLサーバーをインストールする必要はありません。

于 2013-01-15T22:39:14.083 に答える