Ekate Posted June 14, 2012 at 05:07 PM Report Share #462884 Posted June 14, 2012 at 05:07 PM Boa tarde, gostaria que alguem me desse uma opiniao a respeito do codigo mais abaixo em que encontro um erro do tipo NullPointerException e nao percebo o porquê public class JogoTab extends GridPane { private Image[] imagens = new Image[3]; private Label[][]labelTab = new Label[10][5]; private Peca[][] tabuleiro; public JogoTab() { } public JogoTab(Tabuleiro tab) { tabuleiro = tab.getTab(); imagens[0] = new Image(LinhaInicial.class.getResourceAsStream("../Imagens/macaAmarela.JPG"), 50, 50, false, false); imagens[1] = new Image(LinhaInicial.class.getResourceAsStream("../Imagens/macaAzul.JPG"), 50, 50, false, false); imagens[2] = new Image(LinhaInicial.class.getResourceAsStream("../Imagens/macaVermelha.JPG"), 50, 50, false, false); for (int i = 0; i < 10; i++) { for (int j = 0; j < 5; j++) { System.out.println(tabuleiro[i][j].getCor()); // tenho a certeza que sao recebidos valores porque estes sao mostrados na consola switch (tabuleiro[i][j].getCor()) { case 'a': labelTab[i][j] = new Label("", new ImageView(imagens[0])); break; case 'u': labelTab[i][j] = new Label("", new ImageView(imagens[1])); break; case 'e': labelTab[i][j] = new Label("", new ImageView(imagens[2])); break; } this.add(labelTab[i][j], j + 1, i + 1); // o erro é referente a esta linha, e nao percebo porquê visto que a labelTab ja foi instanciada diretamente nos atibutos } } } } Link to comment Share on other sites More sharing options...
JACosta Posted June 14, 2012 at 05:47 PM Report Share #462896 Posted June 14, 2012 at 05:47 PM Boas, olha o add é uma função que existe? Link to comment Share on other sites More sharing options...
Ekate Posted June 14, 2012 at 05:54 PM Author Report Share #462897 Posted June 14, 2012 at 05:54 PM o add é uma funçao ja predefinida do GridPane pelo q o professor me disse a classe JogoTab ao s fazer o extends esta torna-se uma GridPane dai eu usar o "this.add" que adiciona na propria classe É que o professor fez um codigo praticamente igual com a diferença do array ser unidimensional Link to comment Share on other sites More sharing options...
JMSR Posted June 14, 2012 at 06:09 PM Report Share #462900 Posted June 14, 2012 at 06:09 PM (edited) Boas A unica explicação que encontro é não entrar num case... Aí a labelTab nunca é inicializada. Edited June 14, 2012 at 06:10 PM by JMSR Link to comment Share on other sites More sharing options...
Ekate Posted June 14, 2012 at 07:02 PM Author Report Share #462913 Posted June 14, 2012 at 07:02 PM Boas A unica explicação que encontro é não entrar num case... Aí a labelTab nunca é inicializada. mas entao como explicas este codigo funcionar? :/ public class LinhaInicial extends GridPane { private Image imagens[] = new Image[3]; private Label lista[] = new Label[5]; private Peca[] linha; public LinhaInicial() { } public LinhaInicial(Tabuleiro tabuleiro) { linha = tabuleiro.getLinhaInicio(); imagens[0] = new Image(LinhaInicial.class.getResourceAsStream("../Imagens/macaAmarela.JPG"), 50, 50, false, false); imagens[1] = new Image(LinhaInicial.class.getResourceAsStream("../Imagens/macaAzul.JPG"), 50, 50, false, false); imagens[2] = new Image(LinhaInicial.class.getResourceAsStream("../Imagens/macaVermelha.JPG"), 50, 50, false, false); for (int j = 0; j < 5; j++) { switch (linha[j].getCor()) { case 'a': lista[j] = new Label("", new ImageView(imagens[0])); break; case 'u': lista[j] = new Label("", new ImageView(imagens[1])); break; case 'e': lista[j] = new Label("", new ImageView(imagens[2])); break; } this.add(lista[j], j + 1, 1); // o "1" é pq eu so quero q apresente na linha "1" } } é isso que eu nao percebo :/ Link to comment Share on other sites More sharing options...
JMSR Posted June 14, 2012 at 07:36 PM Report Share #462921 Posted June 14, 2012 at 07:36 PM (edited) mas no codigo anterior a este tens a certeza que entra num case?! porque é no switch que a label é inicializada, e se nao entrar num case nunca é inicializada... Edited June 14, 2012 at 07:36 PM by JMSR Link to comment Share on other sites More sharing options...
Rui Carlos Posted June 14, 2012 at 09:44 PM Report Share #462943 Posted June 14, 2012 at 09:44 PM No construtor o objecto ainda está a ser criado, pelo que diria que não faz muito sentido fazer uma chamada sobre o this. Diria que é daí que o erro aparece. Mesmo que o labelTab[j] seja null, tal não devia originar uma excepção nessa linha (no máximo daria uma excepção dentro do método add). Se for este o problema, podes colocar o conteúdo do construtor num método de inicialização. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
JACosta Posted June 15, 2012 at 09:17 AM Report Share #462993 Posted June 15, 2012 at 09:17 AM (edited) Boas, olha quantas linhas tem o GridPane, do lado da função add? E ja agora tenta colocar um Default no Case com o print la dentro para ver o que da. Cumprimentos 😉 Edited June 15, 2012 at 09:22 AM by JACosta Link to comment Share on other sites More sharing options...
Ekate Posted June 15, 2012 at 01:29 PM Author Report Share #463073 Posted June 15, 2012 at 01:29 PM Boas, olha quantas linhas tem o GridPane, do lado da função add? E ja agora tenta colocar um Default no Case com o print la dentro para ver o que da. Cumprimentos 😉 eu nao coloquei limite de linhas no GridPane :/ e coloquei o default e realmente a labelTab nao esta a receber nada, devolveu-me "null" Link to comment Share on other sites More sharing options...
Ekate Posted June 15, 2012 at 05:55 PM Author Report Share #463154 Posted June 15, 2012 at 05:55 PM Agradeço imenso a ajuda.. ja resolvi o problema com o prof ele acrescentou somente isto no switch: default: labelTab[i][j] = new Label(""); algo tao simples :/ Link to comment Share on other sites More sharing options...
Rui Carlos Posted June 15, 2012 at 06:52 PM Report Share #463161 Posted June 15, 2012 at 06:52 PM Já te tinham sugerido adicionares o default para verificares se estava sempre a haver a inicialização da posição. De qualquer modo, acho estranho que a excepção estivesse a ser lançada naquela linha. Só deveria haver problemas dentro do método add. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now