Я использую 2 таблицы (JTable) с их DefaultTableModels.
Первая таблица уже заполнена.
Вторая таблица заполняется для каждой строки первой таблицы (с использованием SQL-запроса).
Моя цель - экспортировать каждую строку первой таблицы с соответствующими строками второй в файле Excel.
Я делаю это с помощью for (для каждой строки 1-й таблицы), в котором я записываю строку 1-й таблицы в файле Excel, а затем заполняю 2-ю таблицу (для этой строки 1-й таблицы). получить каждую строку из таблицы (фактически из ее модели) и поместить ее в файл Excel под текущей строкой 1-й таблицы.
Это означает, что если в первой таблице будет n строк, я очистлю и снова заполню вторую таблицу n раз.
Весь этот код вызывается в отдельном потоке.
ПРОБЛЕМА
Все работает отлично, за исключением того, что я получаю некоторые исключения.
Странно то, что я не получаю ничего ложного в своем результате.
Файл Excel идеален.
Некоторые строки исключений:
Исключение в потоке "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0> = 0
на java.util.Vector.elementAt (Vector.java:427)
в javax.swing.table.DefaultTableModel.getValueAt (DefaultTableModel.java:632)
в javax.swing.JComponent.paint (JComponent.java:1017)
в javax.swing.RepaintManager.paint (RepaintManager.java:1220)
в javax.swing.RepaintManager.paintDirtyRegions (RepaintManager.java:803)
Я предполагаю, что проблема заключается в том, что второй таблице необходимо заполнить еще некоторое время, прежде чем я попытаюсь получить из нее какие-либо данные. Вот почему я вижу RepaintManager и paintDirtyRegions в моих исключениях.
Я также выполнил свою программу в режиме отладки и ставил точку останова после каждой совокупности 2-й таблицы. Затем я нажал F5, чтобы продолжить для каждой популяции 2-й таблицы, и исключений не появилось. Программа подошла к концу без каких-либо исключений.
Это еще один важный факт, который говорит мне, что, возможно, в этом случае я дал таблице достаточно времени для заполнения.
Конечно, вы спросите меня:
Если ваша программа работает нормально, почему вас волнуют исключения?
Я забочусь о том, чтобы избежать каких-либо проблем в будущем, и я хочу лучше понять Java и Java GUI и потоки.
Почему вы зависите от компонента графического интерфейса (и его модели) для получения информации и почему вы не воссоздаете набор результатов, который заполняет ваши таблицы с помощью SQL-запроса, и не получаете информацию из набора результатов?
Это было бы лучшим и правильным способом. Дело в том, что у меня есть готовый код таблиц, и мне было проще получить информацию от них. Но правильным способом было бы получить все напрямую из базы данных. В любом случае, то, что я сделал, подняло мой вопрос, и ответ на него помог бы мне понять больше вещей о Java. Так я и запостил.