Não carrega a Imagem

9 respostas
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

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;
        }
    }

9 Respostas

ricoldi
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

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;
        }
    }

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

vfmartins

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

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"  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

vfmartins

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"  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

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

ricoldi

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

F

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

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?

ricoldi

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?

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…

vfmartins

ricoldi:
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?

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…

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

Criado 14 de janeiro de 2010
Ultima resposta 14 de jan. de 2010
Respostas 9
Participantes 3