Я бы порекомендовал вам взглянуть на две части метода fillData
:
1) try-catch
, вероятно, скрывает проблему: вначале вы вызываете метод getWorkbook
, который,согласно его java doc , может выдать исключение, если, например, файл не существует.Однако вы вызываете getWorkbook
в блоке try-catch
, который даже не печатает исключение.Следовательно, если что-то пойдет не так, вы получите нулевой указатель на workbook.getSheet(0)
, потому что переменная workbook
продолжает содержать нулевое значение (как вы назначаете нулевое значение в первой строке метода).Чтобы избежать этой проблемы, вы можете добавить printStackTrace
в блоке catch.Другой вариант - добавить throws Exception
в определение метода и удалить блок try-catch
.Делая это, вы можете найти истинную причину нулевого указателя.
try {
workbook = Workbook.getWorkbook(file);
} catch (Exception e) {
e.printStackTrace();
}
ИЛИ
public void fillData(File file) throws Exception {
Workbook workbook = Workbook.getWorkbook(file);
....
}
2) Инициализированы ли глобальные переменные заголовки?Я не вижу в вашем коде, где вы инициализируете переменные заголовков (как headers = new ArrayList()
).Если вы этого не сделали, вы получите нулевой указатель на headers.clear()
.Более того, та же проблема может возникнуть с переменной data
, если вы ее не инициализируете.