Witam miałem napisać program do zarządzania pracownikami. Napisałem bez problemu, zapis i odczyt odbywał się z i do pliku txt przez BufferedReader i BufferedWriter. Teraz prowadzący zażyczył sobie zrobienie odczytu za pomocą Serializable
o ile nie mam problemu z zapisem i odczytem (bezpośrednim do danego typu) to nie mogę sobie poradzić z polimorfizmem mam klasę abstrakcyjną Pracownik
i rozszerzam ją o klasy Administracyjny
oraz Dydaktyczny
wszystkie dane muszę przechowywać w tablicach oprócz wyniku wyszukiwania. Gdy próbuję to skompilować to dostaję taki błąd
Exception in thread "main" java.lang.NullPointerException at Operacje.wypiszWszystkich(Operacje.java:125) at Test.main(Test.java:76)
podejrzewam że tablica jest pusta bo nie działa odczyt, moglibyście mi pomóc jak go wykonać
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
public class Operacje implements Serializable{
ArrayList <Pracownik> result=new ArrayList<Pracownik>();
public Pracownik workers[];
private int amount;
public Operacje(){
int amount=0;
byte a=0;
try{
ObjectInputStream s=new ObjectInputStream(new FileInputStream("Database.ur"));
amount=s.readInt();
this.amount=amount;
workers=new Pracownik[amount];
Object worker=null;
for (int i=0;i<amount;i++){
worker=s.readObject();
if(worker instanceof Admnistracyjny){
workers[i]=new Admnistracyjny("","",a,"",0,"");
workers[i]=(Admnistracyjny)worker;
}
if(worker instanceof Dydaktyczny){
workers[i]=new Dydaktyczny("","",a,"",0,"");
workers[i]=(Dydaktyczny)worker;
}
}
s.close();
}catch(Exception e){
}
}
public void Search (String type,String value){
result.clear();
if (type.equals("zarobki")){
int ernings=new Integer(value);
for (int i=0;i<workers.length;i++){
if(workers[i].getEarnings()==ernings){
result.add(workers[i]);
}
}
}
else if (type.equals("nazwisko")){
for (int i=0;i<workers.length;i++){
if(workers[i].getSurname().equals(value)){
result.add(workers[i]);
}
}
}
else if(type.equals("pesel")){
for (int i=0;i<workers.length;i++){
if(workers[i].getPesel().equals(value)){
result.add(workers[i]);
}
}
}
else if (type.equals("stanowisko")){
for (int i=0;i<workers.length;i++){
if(((workers[i] instanceof Admnistracyjny) && (((Admnistracyjny)workers[i])).getPost().equals(value))){
result.add(workers[i]);
}
}
}
else if (type.equals("przedmiot")){
for (int i=0;i<workers.length;i++){
if(((workers[i] instanceof Dydaktyczny) && (((Dydaktyczny)workers[i])).getSubject().equals(value))){
result.add(workers[i]);
}
}
}
}
public void SaveFile(Pracownik tab1[]) throws FileNotFoundException{
try{
ObjectOutputStream save=new ObjectOutputStream(new FileOutputStream("Database.ur"));
int suma=((tab1.length+workers.length));
save.writeInt(suma);
for (int i=0;i<suma;i++){
if (i<workers.length){
save.writeObject(workers[i]);
}
else{
save.writeObject(tab1[i-workers.length]);
}
}
save.close();
}
catch(Exception e){
}
System.out.println("Zapisano");
}
public void Output(){
if(result.isEmpty()){
System.out.println("Brak pracowników o danych parametrach");
}
else{
for(Pracownik p:result){
System.out.println(p.toString());
}
}
}
public void wypiszWszystkich(){
for (int i=0;i<amount;i++){
System.out.println(workers[i].toString());
}
}
}