error-importing images


public class ImageTest extends JFrame {

	public static void main(String[] args) {

        DisplayMode displayMode;

        if (args.length == 3) {
            displayMode = new DisplayMode(
                Integer.parseInt(args[0]),
                Integer.parseInt(args[1]),
                Integer.parseInt(args[2]),
                DisplayMode.REFRESH_RATE_UNKNOWN);
        }
        else {
            displayMode = new DisplayMode(800, 600, 16,
                DisplayMode.REFRESH_RATE_UNKNOWN);
        }

        ImageTest test = new ImageTest();
        test.run(displayMode);
    }

    private static final int FONT_SIZE = 24;
    private static final long DEMO_TIME = 10000;

    private SimpleScreenManager screen;
    private Image bgImage;
    private Image opaqueImage;
    private Image transparentImage;
    private Image translucentImage;
    private Image antiAliasedImage;
    private boolean imagesLoaded;

    public void run(DisplayMode displayMode) {
        setBackground(Color.blue);
        setForeground(Color.white);
        setFont(new Font("Dialog", Font.PLAIN, FONT_SIZE));
        imagesLoaded = false;

        screen = new SimpleScreenManager();
        try {
            screen.setFullScreen(displayMode, this);
            loadImages();
            try {
                Thread.sleep(DEMO_TIME);
            }
            catch (InterruptedException ex) { }
        }
        finally {
            screen.restoreScreen();
        }
    }


    public void loadImages() {
        bgImage = loadImage("desktop/mn/images/background.jpg");
        opaqueImage = loadImage("desktop/mn/images/opaque.png");
        transparentImage = loadImage("desktop/mn/images/transparent.png");
        translucentImage = loadImage("desktop/mn/images/translucent.png");
        antiAliasedImage = loadImage("desktop/mn/images/antialiased.png");
        imagesLoaded = true;
        // signal to AWT to repaint this window
        repaint();
    }


    private Image loadImage(String fileName) {
        return new ImageIcon(fileName).getImage();
    }


    public void paint(Graphics g) {
        // set text anti-aliasing
        if (g instanceof Graphics2D) {
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(
                RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        }

        // draw images
        if (imagesLoaded) {
            g.drawImage(bgImage, 0, 0, null);
            drawImage(g, opaqueImage, 0, 0, "Opaque");
            drawImage(g, transparentImage, 320, 0, "Transparent");
            drawImage(g, translucentImage, 0, 300, "Translucent");
            drawImage(g, antiAliasedImage, 320, 300,
                "Translucent (Anti-Aliased)");
        }
        else {
            g.drawString("Loading Images...", 5, FONT_SIZE);
        }
    }


    public void drawImage(Graphics g, Image image, int x, int y,
        String caption)
    {
        g.drawImage(image, x, y, null);
        g.drawString(caption, x + 5, y + FONT_SIZE +
            image.getHeight(null));
    }

}

the code is not giving me any errors but it should load the images and display them for 10 seconds before exiting but as soon as the images are loaded the program closes, and I cant figure out why, please explain how to fix the error.

I’m guessing the paths are wrong in your images so they’re not loading, causing your try block to fail before Thread.sleep is called and thereby hitting the finally almost immediately.

Your paths should either be absolute or should include System.getProperty(“user.dir”) to ensure that they’re getting pulled from the right place. In other words, change your image paths to:


    public void loadImages() {
        bgImage = loadImage(System.getProperty("user.dir") + "desktop/mn/images/background.jpg");
        opaqueImage = loadImage(System.getProperty("user.dir") + "desktop/mn/images/opaque.png");
        transparentImage = loadImage(System.getProperty("user.dir") + "desktop/mn/images/transparent.png");
        translucentImage = loadImage(System.getProperty("user.dir") + "desktop/mn/images/translucent.png");
        antiAliasedImage = loadImage(System.getProperty("user.dir") + "desktop/mn/images/antialiased.png");
        imagesLoaded = true;
        // signal to AWT to repaint this window
        repaint();
    }

And to make your life easier, catch that error (always catch errors and at least print them so that you can see what’s going on).


try {
            loadImages();
            try {
                Thread.sleep(DEMO_TIME);
            }
            catch (InterruptedException ex) { }
        }
		catch (Exception e) {
			e.printStackTrace();
		}
        finally {
            screen.restoreScreen();
        }

I changed your your app slightly so I could run it and it worked for me (I put absolute paths for an image).


import javax.swing.*;
import java.awt.*;

public class ImageTest extends JFrame {
 
    public static void main(String[] args) {
 
        ImageTest test = new ImageTest();
        test.run();
    }
 
    private static final int FONT_SIZE = 24;
    private static final long DEMO_TIME = 10000;
 
    private Image bgImage;
    private Image opaqueImage;
    private Image transparentImage;
    private Image translucentImage;
    private Image antiAliasedImage;
    private boolean imagesLoaded;
 
	public ImageTest()
	{
		setSize(500,500);
		setVisible(true);
	}

    public void run() {
        setBackground(Color.blue);
        setForeground(Color.white);
        setFont(new Font("Dialog", Font.PLAIN, FONT_SIZE));
        imagesLoaded = false;
 
        try {
            loadImages();
            try {
                Thread.sleep(DEMO_TIME);
            }
            catch (InterruptedException ex) { }
        }
		catch (Exception e) {
			e.printStackTrace();
		}
        finally {
            System.exit(0);
        }
    }
 
 
    public void loadImages() {
        bgImage = loadImage("~/Desktop/Image.png");
        opaqueImage = loadImage("~/Desktop/Image2.png");
        transparentImage = loadImage("~/Desktop/Image3.png");
        translucentImage = loadImage("~/Desktop/Image4.png");
        antiAliasedImage = loadImage("~/Desktop/Image5.png");
        imagesLoaded = true;
        // signal to AWT to repaint this window
        repaint();
    }
 
 
    private Image loadImage(String fileName) {
        return new ImageIcon(fileName).getImage();
    }
 
 
    public void paint(Graphics g) {
        // set text anti-aliasing
        if (g instanceof Graphics2D) {
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(
                RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        }
 
        // draw images
        if (imagesLoaded) {
            g.drawImage(bgImage, 0, 0, null);
            drawImage(g, opaqueImage, 0, 0, "Opaque");
            drawImage(g, transparentImage, 320, 0, "Transparent");
            drawImage(g, translucentImage, 0, 300, "Translucent");
            drawImage(g, antiAliasedImage, 320, 300,
                "Translucent (Anti-Aliased)");
        }
        else {
            g.drawString("Loading Images...", 5, FONT_SIZE);
        }
    }
 
 
    public void drawImage(Graphics g, Image image, int x, int y,
        String caption)
    {
        g.drawImage(image, x, y, null);
        g.drawString(caption, x + 5, y + FONT_SIZE +
            image.getHeight(null));
    }
 
}