Erro no programa

Bom dia, estou com uma parte do código do algoritmo KMeans em java que fiz e o mesmo dá os seguintes erros:

Exception in thread “main” java.lang.NullPointerException
at Principal.proteina_inicializa(Principal.java:27)
at Principal.main(Principal.java:271)

O trecho que lança esses erros é o seguinte:
Scanner scanner;
try {
scanner = new Scanner(new File(“database2.data”));
scanner.useDelimiter(" ");
for (a = 0; a < Constantes.m; a++){
proteina[a].nome = scanner.next(); (AQUI LANÇA UM ERRO!!!)
proteina[a].posicao[0] = scanner.nextFloat();
proteina[a].posicao[1] = scanner.nextFloat();
proteina[a].posicao[2] = scanner.nextFloat();
proteina[a].posicao[3] = scanner.nextFloat();
proteina[a].posicao[4] = scanner.nextFloat();
proteina[a].posicao[5] = scanner.nextFloat();
proteina[a].posicao[6] = scanner.nextFloat();
proteina[a].posicao[7] = scanner.nextFloat();
proteina[a].classe = scanner.next();
scanner.close();
}
} catch (FileNotFoundException e) {

		e.printStackTrace();
	}

e na seguinte parte tbm:
public static void main(String args[]){

	Proteina[] proteina = new Proteina[Constantes.m];
	Centroide[] centroide = new Centroide[Constantes.k];

	float[][] tabela_distancia = new float[Constantes.m][Constantes.k];
	float[][] tabela_proximidade = new float[Constantes.m][2];
	float custo_pre;


	
	float custo_pos = 0;

	int a;
	int b;
	int iteracao = 0;
	int iteracao2 = 1;

	
	proteina_inicializa(proteina); (AQUI LANÇA UM ERRO)

Se puderem me ajudar, eu agradeço!!!

Estás a tentar escrever o atriobuto nome de um elemento que não existe. Tens de criar primeiro um elemento para essa posição:
proteina[a] = new Proteina();

Este vetor está inicializado nesse método:

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

	Proteina[] proteina = new Proteina[Constantes.m];
	Centroide[] centroide = new Centroide[Constantes.k];

	float[][] tabela_distancia = new float[Constantes.m][Constantes.k];
	float[][] tabela_proximidade = new float[Constantes.m][2];
	float custo_pre;


	
	float custo_pos = 0;

	int a;
	int b;
	int iteracao = 0;
	int iteracao2 = 1;

	
	proteina_inicializa(proteina);

O vetor tem m posições a null, tens de criar um objeto para cada posição antes de tentares aceder ao objeto dessa posição.