Erro java.lang.NullPointerException mesmo com Objeto instanciado e inicializado

Boa tarde,

No código abaixo já instanciei a classe Fornecedor dentro do main de Produto e mesmo assim continua o erro abaixo, alguem pode me ajudar a consertar e explicar pq está errado assim por favor.

Exception in thread "main" java.lang.NullPointerException
	at br.com.java.pacotesemodificadores.produtos.Produto.main(Produto.java:27)

obs: desconsiderei os modificadores uma vez que estao dentro do mesmo pacote e arquivo.

package br.com.java.pacotesemodificadores.produtos;

class Produto {
	
	private String nome;
	private Fornecedor fornecedor;
	public double preco;
	double imposto;
	
	public static void main(String[] args) {
		Fornecedor f = new Fornecedor(); // Inicialização de Fornecedor
		Produto p = new Produto();       // Inicialização de Produto

		/* Preenchimento de Fornecedor*/
		f.cnpj = "234234123"; 
		f.codigo = "3423423423";

		/* Preenchimento de Fornecedor*/
		p.nome = "Notebook";
		p.preco = 1500;
		p.imposto = 2.0;
		p.fornecedor.codigo = f.codigo; // Linha do erro
		p.fornecedor.cnpj = f.cnpj;

		/* Imprimindo */
		System.out.println("---------------");
		System.out.println("Nome do produto: " + p.nome );
		System.out.println("Preço: " + p.preco );
		System.out.println("Imposto: " + p.imposto);
		System.out.println("---------------");
		System.out.println("Fornecedor codigo: " + p.fornecedor.codigo );
		System.out.println("Fornecedor cnpj: " + p.fornecedor.cnpj);
		System.out.println("---------------");
	}
}
class Fornecedor {

	String codigo;
	private String nome;
	public String cnpj;
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getNome() {
		return nome;
	}
}

Não achei no código onde vc atribui o fornecedor ao produto.

p.fornecedor = f;
1 curtida

Justamente o que estava faltando, visto que a classe produto recebe como atributo um Fornecedor:

public class Produto {

private String nome;
private Fornecedor fornecedor;
public double preco;
double imposto;

public static void main(String[] args) {
	Fornecedor f = new Fornecedor(); // Inicialização de Fornecedor
	Produto p = new Produto(); // Inicialização de Produto

	/* Preenchimento de Fornecedor */
	f.cnpj = "234234123";
	f.codigo = "3423423423";

	/* Preenchimento de Fornecedor */
	p.nome = "Notebook";
	p.preco = 1500;
	p.imposto = 2.0;
	p.fornecedor = f; //LINHA QUE ESTAVA FALTANDO!
	p.fornecedor.codigo = f.codigo; // Linha do erro
	p.fornecedor.cnpj = f.cnpj;

	/* Imprimindo */
	System.out.println("---------------");
	System.out.println("Nome do produto: " + p.nome);
	System.out.println("Preço: " + p.preco);
	System.out.println("Imposto: " + p.imposto);
	System.out.println("---------------");
	System.out.println("Fornecedor codigo: " + p.fornecedor.codigo);
	System.out.println("Fornecedor cnpj: " + p.fornecedor.cnpj);
	System.out.println("---------------");
}}