Erro com o Image.createimage()

Olá,

Sou iniciante no mundo do java, mas tenho grande força de vontade pra aprender cada vez mais, porém a gente se depara com dificuldades e espero que vocês possam me entender e se possível uma ajuda.

Estava Seguindo um *.pdf Sobre games no celular, eu tenho instalado o Eclipse na minha máquina então eu instalei também o MOTODEV Studio for Java ME v2 e estou desenvolvendo nele.

O primeiro exemplo do *.pdf rodou normalmente, que seria criar um X no centro da tela e manipulá-lo com botões.

O meu problema está na execução do segundo exemplo desse *.pdf, o segundo exemplo trabalha com sprites, e erro está no momento que vai criar a imagem(sprite) eu coloquei a imagem na pasta /res do workspace escolhido pelo MOTODEV Studio for Java ME v2, não sei o que acontece que dá esse erro: java.io.IOException: Unable to find resource: /transparent.png

-O workspace escolhido: C:\Documents and Settings\usua\Desktop\Exemplo jogo Celular1
-imagem colocada na doretorio:C:\Documents and Settings\usua\Desktop\Exemplo jogo Celular1\CeluarSprite\res

já li a respeito e falaram que tem que colocar a imagem num .jar ou .jad, enfim se for isso eu não sei como configura isso. Se não for nem sei como resolve isso tb, alguém pode dar uma mão?

Eis o código:

Main Game Canvas with Sprites:

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class ExampleGameCanvas extends GameCanvas implements Runnable {
private boolean isPlay; // Game Loop runs when isPlay is true
private long delay; // To give thread consistency
private int currentX, currentY; // To hold current position of the 'X'
private int width; // To hold screen width
private int height; // To hold screen height
// Sprites to be used
private Sprite sprite;
private Sprite nonTransparentSprite;
// Constructor and initialization
public ExampleGameCanvas() throws Exception {
super(true);
width = getWidth();
height = getHeight();
currentX = width / 2;
currentY = height / 2;
delay = 20;
// Load Images to Sprites
Image image = Image.createImage("/transparent.png");
sprite = new Sprite (image,32,32);
Image imageTemp = Image.createImage("/nontransparent.png");
nonTransparentSprite = new Sprite (imageTemp,32,32);
}
// Automatically start thread for game loop
public void start() {
isPlay = true;
Thread t = new Thread(this);
t.start();
}
public void stop() { isPlay = false; }
// Main Game Loop
public void run() {
Graphics g = getGraphics();
while (isPlay == true) {
input();
drawScreen(g);
try { Thread.sleep(delay); }
catch (InterruptedException ie) {}
}
}
// Method to Handle User Inputs
private void input() {
int keyStates = getKeyStates();
sprite.setFrame(0);
// Left
if ((keyStates & LEFT_PRESSED) != 0) {
currentX = Math.max(0, currentX - 1);
sprite.setFrame(1);
}
// Right
if ((keyStates & RIGHT_PRESSED) !=0 )
if ( currentX + 5 < width) {
currentX = Math.min(width, currentX + 1);
sprite.setFrame(3);
}
// Up
if ((keyStates & UP_PRESSED) != 0) {
currentY = Math.max(0, currentY - 1);
sprite.setFrame(2);
}
// Down
if ((keyStates & DOWN_PRESSED) !=0)
if ( currentY + 10 < height) {
currentY = Math.min(height, currentY + 1);
sprite.setFrame(4);
}
}
// Method to Display Graphics
private void drawScreen(Graphics g) {
g.setColor(0xFF0000);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x0000ff);
// display sprites
sprite.setPosition(currentX,currentY);
sprite.paint(g);
nonTransparentSprite.paint(g);
flushGraphics();
}
}

Main Midlet:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ExampleGameSpriteMidlet extends MIDlet {
private Display display;
public void startApp() {
try {
display = Display.getDisplay(this);
ExampleGameCanvas gameCanvas = new ExampleGameCanvas();
gameCanvas.start();
display.setCurrent(gameCanvas);
} catch (Exception ex) {
System.out.println(ex);
}
}
public Display getDisplay() {
return display;
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
exit();
}
public void exit() {
System.gc();
destroyApp(false);
notifyDestroyed();
}
}

Cara,

O nome das imagens para o java é case sensitive. Verifica se você está escrevendo o nome exatamente igual.

Abraço,
Juliano

Tipo…
tenta colocar outra imagem só para testar,
pois algumas imagens que estao na net com a extensao em png, as vezes são
falsas ou seja, tem outro dipo de extao.
Por isso tenta fazer o teste com alguma fonte segura…

E qdo for postar codigo usa a TAG de CODIGO…
Abraço!

Bom Diogo, as imagens eu peguei na net e tirei o fundo e eu mesmo as salvei como .png, creio eu que não seja o formato das imagens, mas o erro persiste, será que tem algum passo que eu não fiz que faça com que a Midlet encontre as imagens que quero?

Ah certo!Então… Nunca trabalhei com Sprites… mas asssim…
Para criar um alert vocÊ tem um metodo para persistir, por exemplo:

Image im1 = Image.createImage("/Alert.png"); SearchRecord = new Alert("Mensagem", " Cadastro Não Encontrado!!!",im1,AlertType.ERROR); SearchRecord.setTimeout(Alert.FOREVER);

Bem parecido com sprite…
Teste algum modo de definir o tempo que ficará a visivel!

Espero ter ajudado…abraço!

Bem Diogo, agradeço por sua boa vontade em me ajudar, mas como disse eu sou iniciante e não entendo muito bem esse código que postei, bom pelo jeito o erro está no código? Se puder me apontar onde necessariamente e se possivel uma resolução agradeço.

[]´s

Olá amigo.

Segue os passos para resolver o seu problema:

Nesta primeira parte resolverá o java.io.IOException

  1. Coloque a sua imagem na pasta res do seu projeto.

Após ter feito isso provavelmente você terá um erro chamado java.lang.IllegalArgumentException então faça o seguinte:

  1. Na linha 22 você está declarando que o seu Sprite tem 32 pixels por 32 pixels, e o tamanho da sua imagem provavelmente não deve ser multiplo de 32, o mesmo acontece na linha 24.

Você tem duas maneiras de resolver.

1º Redimensione a sua imagem para 32x32 pixels.
2º Redimensione para 30x32 pixels e após isso modifique os valores da linha 22 e 24

Exemplo:

// Load Images to Sprites   
21. Image image = Image.createImage("/transparent.png");   
22. sprite = new Sprite (image,30,32);   
23. Image imageTemp = Image.createImage("/nontransparent.png");   
24. nonTransparentSprite = new Sprite (imageTemp,30,32); 

Feito isso você conseguirá rodar o seu programa.

[URL=http://img151.imageshack.us/my.php?image=j2me.jpg][/URL]

Cara, tenta ver se a extensao da tua imagem nao ta errada, por exemplo
minhaimagem.PNG, quando na verdade vc procura por minhaimagem.png

[quote=j0nny]Cara, tenta ver se a extensao da tua imagem nao ta errada, por exemplo
minhaimagem.PNG, quando na verdade vc procura por minhaimagem.png[/quote]

Olha ai o segundo necromancer do topico… revivendo o falecido novamente, vc viu que a data da pergunta é 27/11/2008 17:05:33 já veio o Welysson com uns 5 meses depois e responde a pergunta, ai vc com uns 7 meses vem e responde tb. Se duvidar o cara nem programa mais em java, agora é Ruby ou Python.

Ou é pra comemorar o aniversario dessa pergunta?

Abraços.

[quote=ricoldi][quote=j0nny]Cara, tenta ver se a extensao da tua imagem nao ta errada, por exemplo
minhaimagem.PNG, quando na verdade vc procura por minhaimagem.png[/quote]

Olha ai o segundo necromancer do topico… revivendo o falecido novamente, vc viu que a data da pergunta é 27/11/2008 17:05:33 já veio o Welysson com uns 5 meses depois e responde a pergunta, ai vc com uns 7 meses vem e responde tb. Se duvidar o cara nem programa mais em java, agora é Ruby ou Python.

Ou é pra comemorar o aniversario dessa pergunta?

Abraços.[/quote]

Desculpa aí mestre, mas pode haver gente com o mesmo problema, como eu também consegui resolver problemas com tópicos antigos 8)