Gostaria de saber se existe alguma diferença entre essas duas formas de instanciar um objeto:Image face1 = new ImageIcon("src/img/001.png").getImage();ouImage face1;
face1 = new ImageIcon("src/img/001.png").getImage();De onde vem minha dúvida? Bem, estive acompanhando uns tutoriais de criação de jogos e me deparei com a situação de que ao criar uma animação básica com dois frames (duas imagens) a animação para mim não aparece como deveria. Fica somente no segundo quadro da animação. Intrigado com esse fato comecei a fuçar o código tentando concertar e adicionei a linha 05 no trecho abaixo (reinstanciei o objeto com a mesma imagem) e isso resolveu o problema. // Carrega Imagens
public void loadPics(){
bg = new ImageIcon("src/img/fundo.png").getImage();
Image face1 = new ImageIcon("src/img/001.png").getImage();
face1 = new ImageIcon("src/img/001.png").getImage();
Image face2 = new ImageIcon("src/img/002.png").getImage();
a = new Animation();
a.addScene(face1, 250);
a.addScene(face2, 250);
}Em seguida o refiz assim: // Carrega Imagens
public void loadPics(){
bg = new ImageIcon("src/img/fundo.png").getImage();
Image face1;
face1 = new ImageIcon("src/img/001.png").getImage();
Image face2 = new ImageIcon("src/img/002.png").getImage();
a = new Animation();
a.addScene(face1, 250);
a.addScene(face2, 250);
}
E a animação aconteceu corretamente.
Existe alguma explicação para o que aconteceu? Esta situação não aconteceu na máquina que rodava o tutorial, que estava em ambiente Windows e eu estou em ambiente Linux, esse pode ser um dos motivos?
Ate onde eu sei naum teria o porque disso, se voce criar em uma linha e instanciar na linha de baixo tem que ser a mesma coisa que voce criar e instancia na mesma linha que do meu ponto de vista estaria correto, a plataforma que vc esta rodando acho que naum influencia, quem sabe a versao do java pode ter a ver, mas naum tenho certeza e acho isso muito pouco provavel
Tem alguma coisa errada no código que nao sei o que é, mas acredito que o motivo é que o codigo original não é o mesmo que está publicado.
De qualquer forma voce descobriu um dos motivos de escrever em linhas separadas: As vezes é mais facil achar um erro e/ou debugar o código linha a linha, é um recurso que utilizo nos meus programas profissionalmente
[quote=renatogrosz]Tem alguma coisa errada no código que nao sei o que é, mas acredito que o motivo é que o codigo original não é o mesmo que está publicado.
De qualquer forma voce descobriu um dos motivos de escrever em linhas separadas: As vezes é mais facil achar um erro e/ou debugar o código linha a linha, é um recurso que utilizo nos meus programas profissionalmente[/quote]
Só por curiosidade, em que momento o problema estaria na declaração de uma variável?
Declarar e instanciar em linhas separadas ajuda na hora de debugar o programa, pois fica mais organizado. No seu código você declarou e instanciou na mesma linha, fazer isso em linhas separadas ficaria assim:
Image face1;
face1 = new ImageIcon("src/img/001.png").getImage();
[quote=lucaslzl]Declarar e instanciar em linhas separadas ajuda na hora de debugar o programa, pois fica mais organizado. No seu código você declarou e instanciou na mesma linha, fazer isso em linhas separadas ficaria assim:
[code]
Image face1;
face1 = new ImageIcon(“src/img/001.png”).getImage();
[quote=lucaslzl]Declarar e instanciar em linhas separadas ajuda na hora de debugar o programa, pois fica mais organizado. No seu código você declarou e instanciou na mesma linha, fazer isso em linhas separadas ficaria assim:
[code]
Image face1;
face1 = new ImageIcon(“src/img/001.png”).getImage();
[/code][/quote]
Puff…na minha opinião é uma linha totalmente desnecessária, sem sentido e que poderia ser facilmente evitada.
Para debugar quando der um F6 (se estiver no Eclipse, por exemplo) o face1 vai estar nulo, o que isso ajuda na depuração ?
Esse tipo de tratamento, deve ser aplicado em casos em que precisamos deixar a variável fora de um bloco, como fazemos na leitura de arquivos, por exemplo.
Por exemplo:
InputStream is = null;
try {
//faz algo
} catch(Exception e){
} finally {
if (null != is)
is.close();
}
Sim, faltou o try-catch do IOException o close, mas é um exemplo bobo apenas.