Я пытаюсь получить файл excel из папки ресурсов. Этот метод хорошо работает:NPE с текущим потоком Context Class Loader getResourceAsStream (файл)
public JobOrderGenerator(List<ShopOrder> shopOrder) throws InvalidFormatException, IOException {
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("Shop-Order.xlsx");
createJobOrder(shopOrder);
}
Который называет
void createJobOrder(List<ShopOrder> shopOrder) throws InvalidFormatException, IOException{
for (ShopOrder shopOrder1 : shopOrder) {
System.out.println("Inside createJobOrder "+shopOrder1.getPo_number());
writeToSpecificCell(2, 1, sheetNumber, shopOrder1.getPo_number()); //Po Number
writeToSpecificCell(7, 3, sheetNumber, shopOrder1.getPo_number()); //Part Number
LocalDate date = shopOrder1.getPo_due_date();
String dateToString = date.toString();
writeToSpecificCell(1, 2, sheetNumber, dateToString); //Due_Date
writeToSpecificCell(7, 5, sheetNumber, Integer.toString(shopOrder1.getPart_quantity())); //Quantity
//writeToSpecificCell(1,2,sheetNumber, shopOrder.get); //Material
writeToSpecificCell(8, 3, sheetNumber, shopOrder1.getPart_decription()); //Part Description
//writeToSpecificCell(1,2,sheetNumber, shopOrder.getCustomer()); //Customer
writeToSpecificCell(10, 1, sheetNumber, shopOrder1.getMachine_number()); //Machine
sheetNumber++;
}
}
Это ниже виновника. Как вы можете видеть, что я использовал Println заявления, чтобы выяснить, что происходит, и что я вижу в консоли:
Inside writeToSpecificCell before try statement 1 0 111
сразу после того, что является java.lang.NullPointerException:
Поэтому есть что-то происходит с моим файлом excel. Я просто не могу понять, что. Поскольку я получил это как:
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("Shop-Order.xlsx");
Он должен знать местонахождение файла. Поскольку он находится в моем файле ресурсов, а не на моем пути к классу (так что это будет в моем файле jar), мне нужно правильно получить файл в порядке?
Если это важно, я использую Intellji Ultimate, все еще изучая все входы и выходы, я был сильным пользователем затмения.
----------- Update 1 -----------------
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/resources/Shop-Order.xlsx");
Тем не менее получение же ошибка ...
-------- Update 2 --------------------
try{
ClassLoader classLoader = getClass().getClassLoader();
inputStream = this.getClass().getResourceAsStream("/resources/Shop-Order.xlsx");
if (inputStream == null){
System.out.println("Inputstream is null....");
}
Просто, чтобы подтвердить я также сделал:
inputStream = this.getClass().getResourceAsStream("/resources/Shop-Order .xlsx");
Просто, чтобы подтвердить не было места в Shop-Order.xlsx ...
Это подтверждает, что InputStream является недействительным, поскольку в консоли при печати:
Inputstream is null...
Из моего Println заявления
метод бросает это пустое исключение здесь ...
void writeToSpecificCell(int rowNumber, int cellNumber, int sheetNumber, String value) throws InvalidFormatException, IOException {
System.out.println("inside writeToSpecificCell method before try statement");
try {
System.out.println("inside writeToSpecificCell method inside try statement");
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(sheetNumber);
XSSFRow row = sheet.getRow(rowNumber);
XSSFCell cell = row.createCell(cellNumber);
if (cell == null) {
cell = row.createCell(cellNumber);
}
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(value);
System.out.println("inside writeToSpecificCell method after try statement");
workbook.close();
} catch (IOException e) {
System.out.println("Error in writeToSpecificCell method " + e);
}catch(NullPointerException ex){
System.out.println("Null in writeToSpecificCell method");
}
}
Где код, который действительно выбрасывает это исключение, и где находится трассировка стека? – EJP
@EJP См. Обновление 2. – Drew1208