Заполнение JComboBox из (большого) TextFile

Я создаю личную базу данных фильмов и хочу заполнить поле со списком заголовками фильмов из 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;

}

1 ответ

Решение

Проблема, с которой вы столкнулись, заключается в том, что вы блокируете поток диспетчеризации событий, из-за которого ваше приложение останавливается, когда файл начинает читать. Вы никогда не должны выполнять трудоемкие или блокирующие действия в EDT.

Вам необходимо отключить загрузку в фоновом потоке и загрузить там список, а затем повторно синхронизировать значения обратно в EDT (вы никогда не должны создавать или изменять какие-либо элементы пользовательского интерфейса вне EDT).

Посмотрите на параллелизм в Swing. В вашем случае я бы посоветовал взглянуть на SwingWorker, так как он разработан с учетом ваших реальных требований.

Файловый ввод / вывод может быть медленным для ваших нужд, я мог бы предложить вам посмотреть на загрузку текстового файла в базу данных в стиле SQL, что может дать более быстрые результаты.

Я бы посоветовал взглянуть на HyperSQL или H2, которые являются чистыми и легковесными базами данных Java SQL, но также работают в однопользовательском режиме. Это означает, что вам не нужно устанавливать полноценный SQL-сервер, чтобы использовать их.

Другие вопросы по тегам