CodeAndWave
CodeAndWave

Reputation: 1604

Applet not showing image

I was following this tutorial here

and I downloaded its source code and ran but the image is not showing.

here is the result enter image description here

I was expecting that the result would be like this enter image description here same as the result in the tutorial.

Here is the code: StartingClass.java

package kiloboltgame;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;

public class StartingClass extends Applet implements Runnable, KeyListener {

    private Robot robot;
    private Image image, character;
    private Graphics second;
    private URL base;

    @Override
    public void init() {

        setSize(800, 480);
        setBackground(Color.BLACK);
        setFocusable(true);
        addKeyListener(this);
        Frame frame = (Frame) this.getParent().getParent();
        frame.setTitle("Q-Bot Alpha");
        try {
            base = getDocumentBase();

        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.toString());
        }

        // Image Setups
        character = getImage(base, "data/character.png");
        System.out.println(" "+base);

    }

    @Override
    public void start() {
        robot = new Robot();

        Thread thread = new Thread(this);
        thread.start();
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

    @Override
    public void run() {
        while (true) {
            robot.update();
            repaint();
            try {
                Thread.sleep(17);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void update(Graphics g) {
        if (image == null) {
            image = createImage(this.getWidth(), this.getHeight());
            second = image.getGraphics();
        }

        second.setColor(getBackground());
        second.fillRect(0, 0, getWidth(), getHeight());
        second.setColor(getForeground());
        paint(second);

        g.drawImage(image, 0, 0, this);

    }

    @Override
    public void paint(Graphics g) {
        g.drawImage(character, robot.getCenterX() - 61, robot.getCenterY() - 63, this);

    }

    @Override
    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            System.out.println("Move up");
            break;

        case KeyEvent.VK_DOWN:
            System.out.println("Move down");
            break;

        case KeyEvent.VK_LEFT:
            robot.moveLeft();
            break;

        case KeyEvent.VK_RIGHT:
            robot.moveRight();
            break;

        case KeyEvent.VK_SPACE:
            System.out.println("Jump");
            robot.jump();
            break;

        }

    }

    @Override
    public void keyReleased(KeyEvent e) {
        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            System.out.println("Stop moving up");
            break;

        case KeyEvent.VK_DOWN:
            System.out.println("Stop moving down");
            break;

        case KeyEvent.VK_LEFT:
            robot.stop();
            break;

        case KeyEvent.VK_RIGHT:
            robot.stop();
            break;

        case KeyEvent.VK_SPACE:
            System.out.println("Stop jumping");
            break;
        }

    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
    }
}

Robot.java

package kiloboltgame;

import java.awt.Graphics;

public class Robot {

    private int centerX = 100;
    private int centerY = 382;
    private boolean jumped = false;

    private int speedX = 0;
    private int speedY = 1;


    public void update() {

        // Moves Character or Scrolls Background accordingly.
        if (speedX < 0) {
            centerX += speedX;
        } else if (speedX == 0) {
            //System.out.println("Do not scroll the background.");

        } else {
            if (centerX <= 150) {
                centerX += speedX;
            } else {
                //System.out.println("Scroll Background Here");
            }
        }

        // Updates Y Position
        centerY += speedY;
        if (centerY + speedY >= 382) {
            centerY = 382;
        }

        // Handles Jumping
        if (jumped == true) {
            speedY += 1;

            if (centerY + speedY >= 382) {
                centerY = 382;
                speedY = 0;
                jumped = false;
            }

        }

        // Prevents going beyond X coordinate of 0
        if (centerX + speedX <= 60) {
            centerX = 61;
        }
    }

    public void moveRight() {
        speedX = 6;
    }

    public void moveLeft() {
        speedX = -6;
    }

    public void stop() {
        speedX = 0;
    }

    public void jump() {
        if (jumped == false) {
            speedY = -15;
            jumped = true;
        }

    }

    public int getCenterX() {
        return centerX;
    }

    public int getCenterY() {
        return centerY;
    }

    public boolean isJumped() {
        return jumped;
    }

    public int getSpeedX() {
        return speedX;
    }

    public int getSpeedY() {
        return speedY;
    }

    public void setCenterX(int centerX) {
        this.centerX = centerX;
    }

    public void setCenterY(int centerY) {
        this.centerY = centerY;
    }

    public void setJumped(boolean jumped) {
        this.jumped = jumped;
    }

    public void setSpeedX(int speedX) {
        this.speedX = speedX;
    }

    public void setSpeedY(int speedY) {
        this.speedY = speedY;
    }

}

and here is my file structure in intelij

enter image description here

Whats wrong with the code?? I tride the "../data/character.png" and "../src/data/character.png" but it didnt work.

Upvotes: 0

Views: 1619

Answers (4)

Shaikh Sakib
Shaikh Sakib

Reputation: 109

@Luiggi Mendoza I had the same issue and was able to resolve it by right clicking on 'character.png' and selecting properties and then copying the image's location all the way from its root. In my case it was "/Users/macbookpro/NetBeansProjects/Kilobolt/src/data/character.png" and bingo the robot appeared in the applet window.

And yeah, i am learning game from the same website as you were 3 years back

Upvotes: 0

CraZyDroiD
CraZyDroiD

Reputation: 7105

Copy your data folder into the bin folder. Clean the project and run.

It will work.

Upvotes: 0

Andrew Thompson
Andrew Thompson

Reputation: 168845

  • applet.html the page loading the applet.
  • data (directory)
    • Character.png

If that is the structure of the server, the image will be available by:

getImage(base, "data/character.png");

I stressed server above since that is apparently not how your IDE is set up.


Can you elaborate more?

You opened the src/kilobolt path to show the locations of the source files, but it you expand the bin folder and trace down, you'll probably find the .class files in the bin/kilobolt directory.

An IDE typically won't use an HTML file for loading the applet, but if IntelliJ did, it would probably put it in the bin directory so it has direct access to the class files. The path from there to the image would be ../data/character.png, but instead of using that path, suggest you get the IDE to copy the image into the bin.

At this stage it has become about IntelliJ so any further questions you have, will need to be about the IDE and the run-time class-path it uses.

Upvotes: 1

user2277872
user2277872

Reputation: 2973

This seems to be an image issue. The computer is not able to find the location of the image, or the image is being drawn under the applet.

IF you are using a linux/Mac/unix machine, most of time, I have had to either start from the root folder such as /Users/.....to the source folder, or when using a directory that is closer, just use '/' in front of it. Example is:

You're using a directory named src, with an 'img' folder inside. To get to the 'img' contents, you have two options:

//......src/img

or

/src/img/....

Hope that helped with anything

Upvotes: 0

Related Questions