Error: Exception in thread "main" java.lang.NullPointerException at pub.Pub.main (Pub.java:18)

0

I'm developing a program in java, I've looked at several places to know what I'm missing, everyone said that my variables are getting null value, but I already tried instantiating values in it, using methods, but nothing.

The error is this "Exception in thread" main "java.lang.NullPointerException     at pub.Pub.main (Pub.java:18) ".

Can anyone help?

package pub;

public class Pub {

public static void main(String[] args) {
       Pessoa p = new Pessoa();

       Funcionario f = new Funcionario();
       f.nome = "asd";
       f.cargo = "Bartender";
       f.alteraSalario(950);
       f.idade = 17;

       Musico m = new Musico();
       m.nome = "Aldair";
       m.idade = 19;
       m.instrumento = "Violon";
       m.banda.nomeBanda = "Aldair Playboy";
       m.banda.descricao = "Lorem ipsun";
       m.banda.genero = "Forró";
       m.banda.show.data = "07/05/2018";
       m.banda.show.hora = "23:59";

       System.out.println(p.Pessoa(f));
       System.out.println(p.Pessoa(m));
}

}

Here are the other classes:

Person.java

package pub;

public class Pessoa {
public String nome;
public int idade;

public String Pessoa(Funcionario pessoa){
    return "Nome:" + pessoa.nome + "\n" +
            "Idade:" + pessoa.idade + " " + pessoa.retornaIdade() + "\n" +
            "Cargo:" + pessoa.cargo + "\n" +
            "Salario:" + pessoa.retornaSalario();
}
public String Pessoa(Musico pessoa){
    return "Nome:" + pessoa.nome + "\n" +
            "Idade:" + pessoa.idade + " " + pessoa.retornaIdade() + "\n" +
            "Instrumento:" + pessoa.instrumento + "\n" +
            "Banda:" + pessoa.banda.nomeBanda + "\n" +
            "Genero:" + pessoa.banda.genero + "\n" + 
            "Descrição:" + pessoa.banda.descricao + "\n" +
            "Data/Hora:" + pessoa.banda.retornaData();    
}

}

Musico.java

package pub;

public class Musico extends Pessoa {
public String instrumento;
public Banda banda;

public String retornaIdade() {
    if(idade < 18){
        return "Menor de idade!!";
    }else{
        return "OK!!";
    }
}  
@Override
public String Pessoa(Musico pessoa){
    return "Nome:" + pessoa.nome + "\n" +
            "Idade:" + pessoa.idade + " " + pessoa.retornaIdade() + "\n" +
            "Instrumento:" + pessoa.instrumento + "\n" +
            "Banda:" + pessoa.banda.nomeBanda + "\n" +
            "Genero:" + pessoa.banda.genero + "\n" + 
            "Descrição:" + pessoa.banda.descricao + "\n" +
            "Data/Hora:" + pessoa.banda.retornaData();    
}
}

Band.java

package pub;

public class Banda {
public String nomeBanda;
public String genero;
public String descricao;
public Show show;

public String retornaData(){
    return show.data + " " + show.hora;
}

}

Show.java

package pub;

public abstract class Show {
public String hora;
public String data;

public abstract String retornaData();

}
    
asked by anonymous 06.05.2018 / 23:38

2 answers

2

You have to create a Band object first, before assigning values to it.

m.banda = new Banda();
    
06.05.2018 / 23:50
0

As Welson Teles said you have to create the Band-type object before assigning the value, I recommend that you put in the Musico class constructor to start the variable so you would not have to create every time you use the Musico class

public Musico(){
    this.banda = new Banda();
}
    
07.05.2018 / 00:19