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?
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?
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.
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
[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…