Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятный ArrayIndexOutOfBoundsException 
:(
    Опции темы
STIM
Дата 30.3.2012, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2012

Репутация: нет
Всего: нет



Возникла следующая проблема. Есть таблица, с мною созданной моделью наследованной от AbstractTableModel. Проблема в том, что, при многократном редактировании строк таблицы вылезает исключение. При этом оно вылезает не всегда (но чаще, чем не вылезает), и непонятно на что указывает:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
    at java.util.Vector.elementAt(Unknown Source)
    at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at javax.swing.ViewportLayout.layoutContainer(Unknown Source)
    at java.awt.Container.layout(Unknown Source)
    at java.awt.Container.doLayout(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validate(Unknown Source)
    at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Код большой, выкладывать смысла нет, не зная в каком месте исключение происходит. Подбросьте, пожалуйста, идею в каком месте искать ошибку и как ловить ошибку.
PM MAIL   Вверх
dorogoyIV
Дата 30.3.2012, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(STIM @  30.3.2012,  21:26 Найти цитируемый пост)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0    at java.util.Vector.elementAt(Unknown Source)

пытаешься получить элемент когда в векторе еще нет элементов
PM MAIL   Вверх
COVD
Дата 31.3.2012, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



наверное "при многократном редактировании строк"  вы каким-то образом удаляете колонки из ColumnModel и таблица об этом не знает  
PM MAIL   Вверх
STIM
Дата 31.3.2012, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2012

Репутация: нет
Всего: нет



Код модели таблицы:
Код


public class BetTableModel extends AbstractTableModel {
    // Сделаем хранилище для нашего списка ставок
    private Vector bets;
    // Модель при создании получает список ставок
    public BetTableModel(Vector bets) {
        this.bets = bets;
    }

    // Количество строк равно числу записей
    public int getRowCount() {
        if (bets != null) {
            return bets.size();
        }
        return 0;
    }
    
    // Количество столбцов - 9
    public int getColumnCount() {
        return 9; 
    }
    
    // Вернем наименование колонки
    public String getColumnName(int column) {
        String[] colNames = {"Номер ставки", "Время ставки", "Id чемпионата", "Первая команда", "Вторая команда","Коэф.1","Ничья","Коэф.2","Результат"};
        return colNames[column];
    }
    
    // Возвращаем данные для определенной строки и столбца
    public Object getValueAt(int rowIndex, int columnIndex) {
        if (bets != null) {
            // Получаем из вектора ставку
            Bets bt = (Bets) bets.get(rowIndex);
            // В зависимости от колонки возвращаем 
            switch (columnIndex) {
                case 0: 
                    return bt.getBetId();
                case 1:
                    return bt.getBetTime();
                case 2: 
                    return bt.getChampId();
                case 3:
                    return bt.getNameCom1();
                case 4:
                    return bt.getNameCom2();
                case 5:
                    return bt.getWin1Coef();
                case 6:
                    return bt.getDrawCoef();
                case 7:
                    return bt.getWin2Coef();
                case 8:
                    return bt.getResult();
            }
        }
        return null;
    }
    
    // Добавим метод, который возвращает ставки по номеру строки

    public Bets getStudent(int rowIndex) {
        if (bets != null) {
            if (rowIndex < bets.size() && rowIndex >= 0) {
                return (Bets) bets.get(rowIndex);
            }
        }
        return null;
    }

}




PM MAIL   Вверх
COVD
Дата 31.3.2012, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Здесь все правильно
PM MAIL   Вверх
dorogoyIV
Дата 31.3.2012, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(COVD @  31.3.2012,  15:06 Найти цитируемый пост)
Здесь все правильно

я бы добавил метод setValueAt(Object value, int row, int column) ...
тогда изменения сохранялись бы в модели, а щас у ТС неизвестно куда изменения в таблице попадают  smile 

PM MAIL   Вверх
COVD
Дата 31.3.2012, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



getColumnCount() всегда возвращает 9, но когда таблица пытается получить первую колонку по индексу 0, выясняется, что дефолтная модель колонок (не таблицы) - пустая. Выбрасывается исключение. Как при редактировании строк можно обнулить  DefaultTableColumnModel я не представляю.
PM MAIL   Вверх
STIM
Дата 1.4.2012, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2012

Репутация: нет
Всего: нет



Цитата(dorogoyIV @ 31.3.2012,  15:19)

я бы добавил метод setValueAt(Object value, int row, int column) ...
тогда изменения сохранялись бы в модели, а щас у ТС неизвестно куда изменения в таблице попадают  smile

Спасибо, помогло.
Хотя нет, реже появляться стали.

Это сообщение отредактировал(а) STIM - 1.4.2012, 13:45
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.