Connor
Connor

Reputation: 129

Error with Images

I recently finished the basics of a game that I'm making and I was going to send it to some friends, but whenever they open the .jar it's just a grey window. When I heard that I assumed it was because of the way I got the images (I used a full path: C:\Users\etc). I did some Googling and found a way to get images that seemed more efficient.

private static Image[] mobImages =  new Image[1];

public static void loadImages()
{
     mobImages[1] = Handler.loadImage("res/EnemyLv1.png");
}

public static Image getMobImages(int index)
{
     return mobImages[index];
}

That's what I would like to use. But I did that and changed the rest of my code to support that. And whenever I run a game I get a few errors. Which all point back to

this: if(getBounds().intersects(tempEnemy.getBounds()))

and so probably the way I'm getting the images too. How could I fix this? And are there better ways to get Images? I've tried a few but they haven't worked.

EDIT: I finally solved all of the errors! :D The only problem is that none of the images appear. Here's my code again. Any more help? That would be fantastic! Thanks everybody for the support so far!

Upvotes: 0

Views: 166

Answers (3)

Quetzalcoatl
Quetzalcoatl

Reputation: 3067

Part of the reason could be that your code is pointing to an index of "1" in an array of size 1, meaning that the only available index is in fact "0".

Try mobImages[0] = Handler.loadImage("res/EnemyLv1.png");

Upvotes: 0

Durandal
Durandal

Reputation: 20059

Hard to say whats going wrong in your code. However I recommend you put your image files into a package in the java project (so they will be part of the JAR file) and access them using Class.getResource()/Class.getResourceAsStream(). That avoids multiple pitfalls and keeps everything together.

A sample how to structure your images into the packages:

myproject
  images
    ImageLocator.class
    MyImage1.jpg
    MyImage2.jpg

The ImageLocator class then needs to use relative pathes (just the image name + extension) to access to resources.

public class ImageLocator {
    public final static String IMAGE_NAME1 = "MyImage1.jpg";

    public static Image getImage(final String name) {
        URL url = ImageLocator.class.getResource(name);
        Image image = Toolkit.getDefaultToolkit().createImage(url);
        // ensure the image is loaded
        return new ImageIcon(image).getImage();            
    }
}

This can be done more elegant, but this should get you started. Defining the image names as constants in the ImageLocator class avoids spreading the concrete path throughout the project (as long as the name is correct in ImageLocator, everything else will be checked by the compiler)

Upvotes: 1

Shivam Sarodia
Shivam Sarodia

Reputation: 417

Your code still uses "C:\Users\Kids\Desktop\Java Game\Cosmic Defense\res\EnemyLv2.png" in Enemy.java. Are you sure this exists? If you moved the Cosmic Defense folder, it will not.

(You were talking about changing absolute paths to relative paths, so this may be your problem)

Upvotes: 0

Related Questions