Java i błąd kompilacji - java.lang.NullPointerException

Witam wszystkich,

bawię się w obecnej chwili w obsługę plików excelowskich przez javę. Niestety przy kompilacji otrzymuję następujący błąd:

.

Błąd dotyczy miejsca w którym staram się wypełnić tablicę obiektów. Poniżej załączam kod źródłowy zdefiniowanej przeze mnie klasy oraz głównego programu.

package pl.tmp.tmpexcel;


public class ExcelFileClass {

    private String AdresBudynku;

    private Integer IndeksBudynku;

    private String AdresMieszkania;

    private Integer IndeksMieszkania;

    private String TypMieszkania;    

    private Double PowierzchniaMieszkania;

    private String NazwiskoMieszkanca;

    private Float WskaznikPrzeliczenia;


    public ExcelFileClass(){

        AdresBudynku = null;

        IndeksBudynku = Integer.valueOf(0);

        AdresMieszkania = null;

        IndeksMieszkania = Integer.valueOf(0);

        TypMieszkania = null;

        PowierzchniaMieszkania = Double.valueOf(0);

        NazwiskoMieszkanca = null;

        WskaznikPrzeliczenia = Float.valueOf(0);

    }


    public ExcelFileClass(String AD, Integer IB, String AM, Integer IM, String TM, Double PM, String NM, Float WP){

        AdresBudynku = AD;

        IndeksBudynku = IB;

        AdresMieszkania = AM;

        IndeksMieszkania = IM;

        TypMieszkania = TM;

        PowierzchniaMieszkania = PM;

        NazwiskoMieszkanca = NM;

        WskaznikPrzeliczenia = WP;

    }


    public void setDate(String AD, Integer IB, String AM, Integer IM, String TM, Double PM, String NM, Float WP){

        this.AdresBudynku = AD;

        this.IndeksBudynku = IB;

        this.AdresMieszkania = AM;

        this.IndeksMieszkania = IM;

        this.TypMieszkania = TM;

        this.PowierzchniaMieszkania = PM;

        this.NazwiskoMieszkanca = NM;

        this.WskaznikPrzeliczenia = WP;

    }


    public void ShowDate(){

        System.out.println(AdresBudynku + " " + IndeksBudynku + " " + AdresMieszkania + " " + IndeksMieszkania + " "+ TypMieszkania + " " + PowierzchniaMieszkania + " " + NazwiskoMieszkanca + " " + WskaznikPrzeliczenia);

    }

}

package pl.tmp.tmpexcel;


import java.io.IOException;

import java.io.File;

import jxl.*;

import jxl.read.biff.BiffException;


public class App 

{

    public static void main( String[] args ) throws IOException, BiffException

    {

        int rows = 0; //ilość wierszy - prawidłowa

        int collumns = 0; //ilość kolumn - prawidłowa

        Workbook workbook = Workbook.getWorkbook(new File("C:\\Users\\Sebastian\\Documents\\NetBeansProjects\\tmplTmp\\danetmp\\domy.xls"));

        Sheet sheet = workbook.getSheet(0);


        //sprawdzanie ilości kolumn i wierszy niepustych

        for(int i = 0; i < sheet.getRows(); i++){

            Cell a1 = sheet.getCell(0,i);

            if(a1.getContents() == "")

                break;

            else

                rows+=1;

        }


        for(int i = 0; i < sheet.getColumns(); i++){

            Cell a1 = sheet.getCell(i,0);

            if(a1.getContents() == "")

                break;

            else

                collumns+=1;

        }

        rows -= 1;

        System.out.println(rows + " " + collumns);

        //tworzenie tablicy class z danymi z pliku excel

        ExcelFileClass excel[] = new ExcelFileClass[rows];

        //System.out.print(excel.length);

        //System.out.print(Double.parseDouble(sheet.getCell(7,1).getContents().replace(",", ".")));

        int j = 1;

        for(int i = 0; i < 2; i++){

            excel[i].setDate(sheet.getCell(0, j).getContents(), Integer.parseInt(sheet.getCell(1, j).getContents()), sheet.getCell(2, j).getContents(), Integer.parseInt(sheet.getCell(3, j).getContents()), sheet.getCell(4, j).getContents(), Double.parseDouble(sheet.getCell(5, j).getContents().replace(",", ".")), sheet.getCell(6, j).getContents(), Float.parseFloat(sheet.getCell(7, j).getContents().replace(",", ".")));

            j++;

        }

    }

}

Numerację w pętli zaczynam od 2 wiersza - pierwszy wiersz składa się z nagłówków które chce pominąć.

Bardzo proszę o pomoc w zlokalizowaniu błędu.

nie za bardzo mogę rozczytać ten kod, ale moim zdaniem błąd wskazuje na to, iż próbujesz działać na komórce która nie posiada żadnej wartości

  1. sprawdź działanie dla np zeszytu (tak to się chyba tłumaczy), w którym na pewno masz dane w każdej potrzebenej komórce.

  2. jeśli przypuszczenie się potwierdzi musisz obsłużyć przypadek nulla w komórce.

Przy kompilacji nie otrzymujesz nigdy błędów o wykonywaniu, czyli info o wyjątkach. To błąd “czasu wykonywania”, nie “czasu kompilacji”. Te drugie to błędy składniowe, “czasu wykonywania” to błędy w samym algorytmie, w tym wypadku próba dostępu do pustego, niezaalokowanego obiektu lub komórki tablicy.

Stack Trace pisze dokładnie w której metodzie występuje niełapany wyjątek, zacznij od tamtej metody.

Drodzy koledzy, odpowiedź na ów problem jest śmieszna :slight_smile:

Otóż przy tworzeniu tablicy typów podstawowych wszystkie parametry tablicy w domyśle są “zerowane”. Co z tego że stworzyłem tablicę ExcelFileClass, skoro nie utworzyłem obiektów wewnątrz tablicy? W moim wypadku trzeba było dodać wywołanie excel = new ExcelFileClass() w pętli. To załatwia problem :slight_smile:

Dziękuję wszystkim za pomoc :slight_smile: