Não carrega a Imagem

Olá!!

Alguém sabe porque não carrega a imagem no código abaixo? O sistema entra em loop e não carrega.
Mas quando eu removo as linhas 11, 12 e 13, aí funciona normalmente, só que sem imagem.
O que eu faço para conseguir mostrar a imagem?

Obrigado!
Aguardo sugestões

[code] public class SplashCanvas extends Canvas
{
protected void paint(Graphics g)
{
try
{
imagem = Image.createImage("/mensagem.png");
}
catch (Exception ex) {}

        int x = (getWidth() / 2) - (imagem.getWidth() / 2);
        int y = (getHeight() / 2) - (imagem.getHeight() / 2);
        g.drawImage(imagem, x, y, Graphics.TOP | Graphics.LEFT);

        g.setColor(0xff000088);
        g.drawString("O texto vai aqui", 15, 60, Graphics.BOTTOM| Graphics.LEFT );

        splashIsShown=true;
    }
}[/code]

[quote=vfmartins]Olá!!

Alguém sabe porque não carrega a imagem no código abaixo? O sistema entra em loop e não carrega.
Mas quando eu removo as linhas 11, 12 e 13, aí funciona normalmente, só que sem imagem.
O que eu faço para conseguir mostrar a imagem?

Obrigado!
Aguardo sugestões

[code] public class SplashCanvas extends Canvas
{
protected void paint(Graphics g)
{
try
{
imagem = Image.createImage("/mensagem.png");
}
catch (Exception ex) {}

        int x = (getWidth() / 2) - (imagem.getWidth() / 2);
        int y = (getHeight() / 2) - (imagem.getHeight() / 2);
        g.drawImage(imagem, x, y, Graphics.TOP | Graphics.LEFT);

        g.setColor(0xff000088);
        g.drawString("O texto vai aqui", 15, 60, Graphics.BOTTOM| Graphics.LEFT );

        splashIsShown=true;
    }
}[/code][/quote]

vfmartins, primeiro 2 dicas… uma mais importante que a outra…

1 - Nunca deixe de colocar algo no seu catch{} se estiver testando em um emulador pode ser um e.printStackTrace() mas eu aconcelho algo que você consiga ver, tipo um alert ou algum log mais complexo.

2 - Evite ao maximo processar e desenhar direto no contexto grafico (Famoso Graphics g) invéz disso tenha um metodo atualizar que desenha em um Image e no paing vc só desenha o image no g. isso evita reprocessamento desnecessario e tambem estes laços derivados de erros, pois o paint da vm não pode ficar com erros e nem demorar para processar.

Agora voltando ao seu caso, deve estar dando erro ao carregar a imagem e esse objeto “imagem” deve estar null ou algo parecido, confirme isso. para testar pode colocar toda a implementação do metodo dentro do try-catch e com algo dentro desse catch pelo amor de Deus. Com certeza vai ter um stack do que esta gerando seu erro.

Abraços
Ricoldi

obrigado pelas dicas, mas tenho uma dúvida!

a dica 2 não da na mesma?

vc poderia exemplificar para ficar mais claro?

obrigado novamente!!

OBS: coloquei o procedimento dentro do try (com printStackTrace), mas deu na mesma… nem carrega o Midlet ao compilar

Aqui vou postar um simples exemplo de como a coisa tem que funcionar… pode não ser o melhor jeito, mas me faz uma deferença, ainda mais em dispositivos mais limitados… porque na verdade eu tenho um buffer para cada pedaço de tela, assim repinto só o que mudou mesmo e não a tela toda, capiche?

private Image buffer;

private void atualizarBuffer() {
	/*Cria um Image para servir de buffer para não travar o paint enquanto desenha como vai ser a nova tela*/	
	Image prebuffer = Image.createImage(form.getWidth(), form.getHeight());

	/*Pega o graphics para pode desenhar nele*/
	Graphics bpg = prebuffer.getGraphics();

	/*Faz sua salada de frutas...*/
        bpg.drawImage();
	bhg.drawLine();

	/*Coloco a nova imagem para ser a desenhada no paint*/
	buffer = prebuffer;
}

protected void paint(Graphics g) {
	/*Desenha o seu buffer ou um "aguarde" só para ficar bonitinho...*/
	if (buffer != null) {
	    g.drawImage(buffer, getWidth(), getHeight(), Graphics.RIGHT | Graphics.BOTTOM);

	} else {
	    g.setColor(255, 255, 255);
	    g.fillRect(0, 0, getWidth(), getHeight());
	    g.setColor(0);
	    g.drawString("Aguarde...", getWidth() / 2, getHeight() / 2, Graphics.HCENTER | Graphics.BOTTOM);
	}
}

protected void keyPressed(int keyCode) {
	/*Exemplo para uso*/
	if (keyCode == Canvas.UP){
		atualizarBuffer();
		repaint();
	}
}

Pode ter algum erro porque escrevi no Gedit e não compilei né…
Abraços,
Ricoldi

[quote=ricoldi]Aqui vou postar um simples exemplo de como a coisa tem que funcionar… pode não ser o melhor jeito, mas me faz uma deferença, ainda mais em dispositivos mais limitados… porque na verdade eu tenho um buffer para cada pedaço de tela, assim repinto só o que mudou mesmo e não a tela toda, capiche?

private Image buffer;

private void atualizarBuffer() {
	/*Cria um Image para servir de buffer para não travar o paint enquanto desenha como vai ser a nova tela*/	
	Image prebuffer = Image.createImage(form.getWidth(), form.getHeight());

	/*Pega o graphics para pode desenhar nele*/
	Graphics bpg = prebuffer.getGraphics();

	/*Faz sua salada de frutas...*/
        bpg.drawImage();
	bhg.drawLine();

	/*Coloco a nova imagem para ser a desenhada no paint*/
	buffer = prebuffer;
}

protected void paint(Graphics g) {
	/*Desenha o seu buffer ou um "aguarde" só para ficar bonitinho...*/
	if (buffer != null) {
	    g.drawImage(buffer, getWidth(), getHeight(), Graphics.RIGHT | Graphics.BOTTOM);

	} else {
	    g.setColor(255, 255, 255);
	    g.fillRect(0, 0, getWidth(), getHeight());
	    g.setColor(0);
	    g.drawString("Aguarde...", getWidth() / 2, getHeight() / 2, Graphics.HCENTER | Graphics.BOTTOM);
	}
}

protected void keyPressed(int keyCode) {
	/*Exemplo para uso*/
	if (keyCode == Canvas.UP){
		atualizarBuffer();
		repaint();
	}
}

Pode ter algum erro porque escrevi no Gedit e não compilei né…
Abraços,
Ricoldi[/quote]

obrigado, mas e no caso do meu código, vc tem alguma sugestão? é que ele trava ao compilar, mesmo com o try

e que erro que esta dando no catch?
ou tenta depurar…

Resolveu o problema da imagem? pelo a estou vendo, vc esta usando um PNG nao e?

pessoal, debugando ele trava na linha 11
a variavel imagem vem null
mas a imagem existe e ta no caminho correto
alguem tem alguma sugestão?

[quote=vfmartins]pessoal, debugando ele trava na linha 11
a variavel imagem vem null
mas a imagem existe e ta no caminho correto
alguem tem alguma sugestão?[/quote]

Não esta achando mesmo… onde é o seu “camnho certo” ? pelo visto ai tem que estar na raiz da pasta “src” isso se for no netbeans…

[quote=ricoldi][quote=vfmartins]pessoal, debugando ele trava na linha 11
a variavel imagem vem null
mas a imagem existe e ta no caminho correto
alguem tem alguma sugestão?[/quote]

Não esta achando mesmo… onde é o seu “camnho certo” ? pelo visto ai tem que estar na raiz da pasta “src” isso se for no netbeans…[/quote]

ixi… foi mal… era isso mesmo… é que eu coloquei a imagem junto com package, achei que o correto era o ficar no msm nivel do .java, mas agora que eu coloquei no src passou…

desculpa a ignorância no assunto…

e mto obrigado pela disponibilidade em ajudar!!!

abraço