Cześć, jestem w trakcie tworzenia prostej aplikacji na tablicach bazującej na modelu MVC. Napotkałem problem, a mianowicie w klasie Model stworzyłem tablicę Stringów [100][3], gdzie 100 podawane jest jako parametr programu. Następnie dodałem do niej na sztywno parę elementów. Później z poziomu klasy Kontroler (w której utworzyłem obiekty klas Model i Widok) chcę przekazać tą tablicę jako argument z klasy Model do klasy Widok, żeby ją wyświetlić za pomocą funkcji displayTable, która otrzymuje tą tablicę jako argument. Niestety otrzymuje wyjątek NullPointerException w trakcie wypisywania tak jakby ta tablica była pusta. Co jest tego powodem? Linijka
theView.displayTable(theModel.clientTable);
wyrzuca wyjątek w klasie ApplicationController.
ApplicationController class
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package controller;
import model.ApplicationModel;
import view.ApplicationView;
import java.util.*;
/**
* Kontroler to klasa zawierająca tylko jedną metodę statyczną: main, która
* uruchamia resztę programu i wymienia informacje między elementami
* aplikacji(model i widok).
*
* @author
* @version 1.0
*/
public class ApplicationController {
private ApplicationModel theModel;
private ApplicationView theView;
public static void main(String[] args) {
// przekazanie parametru (sztywnej ilości wierszy w tabeli) do modelu
ApplicationModel theModel = new ApplicationModel(args[0]);
ApplicationView theView = new ApplicationView();
theView.displayTable(theModel.clientTable);
}
}
ApplicationModel class
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package model;
import java.util.*;
/**
*
* @author
*/
public class ApplicationModel {
public String [][] clientTable;
public ApplicationModel(String tableAmountString)
{
//konwersja argumentu String na Int
int tableAmountInt = Integer.parseInt(tableAmountString);
String [][] clientTable = new String[tableAmountInt][3];
for(int i=0; i < clientTable.length; i++)
for(int j=0; j < clientTable[i].length; j++)
clientTable[i][j] = "empty";
clientTable[0][0] = "Janek"; clientTable[0][1] = "Nowak"; clientTable[0][2] = "1";
clientTable[1][0] = "Bogdan"; clientTable[1][1] = "Staropalski"; clientTable[1][2] = "2";
clientTable[2][0] = "Jarosław"; clientTable[2][1] = "Nowowiejski"; clientTable[2][2] = "3";
clientTable[3][0] = "Mietek"; clientTable[3][1] = "Korek"; clientTable[3][2] = "4";
clientTable[4][0] = "Hanka"; clientTable[4][1] = "Dzbanek"; clientTable[4][2] = "5";
}
}
ApplicationView class
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package view;
import java.util.*;
import java.lang.*;
/**
*
* @author
*/
public class ApplicationView {
public ApplicationView() {
System.out.println("Witaj w testowej bazie klientów. Baza zawiera 5 przykładowych rekordów dla testów. W razie potrzeby można dodać ich więcej");
}
public void displayTable(String [][] table)
{
for(int i=0; i < table.length; i++)
for(int j=0; j < table[i].length; j++)
System.out.print(table[i][j]);
}
}