(Java) JList иногда отображает пустой список при запуске программы - PullRequest
1 голос
/ 11 июля 2011

Моя программа считывает файлы из заданного каталога при запуске программы (каждый из которых содержит объект) и добавляет каждый объект в вектор. Затем вызывается updateList (), который перебирает каждый из этих объектов один за другим, добавляя их имена (свойство String) в JList с DefaultListModel.

Проблема в том, что очень редко при запуске программы список кажется пустым. Я выполнил много проверок, таких как получение количества записей в списке, согласно модели списка, и все будет выглядеть правильно.

Кто-нибудь видел это раньше? Я что-то здесь упускаю?

Спасибо, updateList () ниже:

private void updateList(){
    for (int i=0; i < calculators.size(); i++){
        listModel.addElement(calculators.get(i).getName()); 
    }
}

1 Ответ

1 голос
/ 11 июля 2011

Кто-нибудь видел это раньше?

Случайные ошибки обычно происходят из-за того, что вы не обновляете компоненты Swing в потоке диспетчеризации событий. Прочитайте раздел из учебника по Swing на Concurrency для получения дополнительной информации.

В частности, вы будете использовать метод invokeLater () при запуске вашего GUI. В учебнике по Swing есть много примеров. Базовая структура, используемая в учебнике, выглядит следующим образом:

import java.awt.*;
import javax.swing.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        add( new JLabel("Label") );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new SSCCE() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
...