For troubleshooting purposes, try replacing the piece of your code with the following:
URL crateTex;
crateTex=HelloStates.class.getClassLoader().getResource("crate.png");
Image crateIm = Toolkit.getDefaultToolkit().getImage(crateTex);
System.out.println(crateIm == null ? "My image path is incorrect." : "Image path is ok, problem is somewhere else.");
// Get a TextureState
TextureState ts=display.getRenderer().createTextureState();
// Use the TextureManager to load a texture
Texture t =
TextureManager.loadTexture(crateIm,
Texture.MM_LINEAR,
Texture.FM_LINEAR,true);
// Assign the texture to the TextureState
ts.setTexture(t);
Look in the console, if you see "My image path is incorrect." then double check your image path vs your package structure. If you image in inside "com.mycompany.mypackage" then the resource string should be "com/mycompany/mypackage/myimage.png"
Take into account that JPGs do not support transparency. Also jME should be able to load TGAs, PNGs, GIFs, JPGs, etc, etc… That cannot be your problem. Maybe you are using an old JVM that does not support PNG? (like 1.4 or something)