簡體   English   中英

為什么我看不到文件?

[英]Why I can't read file?

嗨,我想做簡單的游戲。 但是在我創建游戲邏輯之前,我遇到了一個問題。 正如我在標題上提到的。 我無法閱讀jpg文件。 我收到此錯誤消息“無法讀取輸入文件!”。 我知道它來自e.getMessage()。 但是,僅此而已。 我真的不知道為什么會這樣。 在missilegame軟件包中,已經有3個jpg文件。

所以,這是代碼。

package missilegame;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

class GraphicObject {
BufferedImage img = null;
int x, y = 0;

public GraphicObject(String name) {
    try {
        img = ImageIO.read(new File(name));
    } catch (Exception e) {
        System.out.println(e.getMessage());
        System.exit(0);
    }
}

public void update() {
}

public void draw(Graphics g) {
    g.drawImage(img, x, y, null);
}

public void keyPressed(KeyEvent event) {

}

public void keyPressed(KeyEvent event, int x, int y) {
    // TODO Auto-generated method stub

}
}

class Missile extends GraphicObject {
    boolean launched = false;

    public Missile(String name) {
        super(name);
        y = -200;
    }

    @Override
    public void update() {
        if (launched)
            y -= 1;
        if (y < -100) {
            launched = false;
        }
    }

    @Override
    public void keyPressed(KeyEvent event, int x, int y) {
        if (event.getKeyCode() == KeyEvent.VK_SPACE) {
            launched = true;
            this.x = x;
            this.y = y;
        }
    }
}

class Enemy extends GraphicObject {
    int dx = -10;

    public Enemy(String name) {
        super(name);
        x = 500;
        y = 0;
    }

    public void update() {
        x += dx;
        if (x < 0) {
            dx = +10;
        }
        if (x > 500)
            dx = -10;
    }

}

class SpaceShip extends GraphicObject {
    public SpaceShip(String name) {
        super(name);
        x = 150;
        y = 350;
    }

    @Override
    public void keyPressed(KeyEvent event) {
        if (event.getKeyChar() == KeyEvent.VK_LEFT) {
            x -= 10;
        }
        if (event.getKeyChar() == KeyEvent.VK_RIGHT) {
            x += 10;
        }
        if (event.getKeyChar() == KeyEvent.VK_UP) {
            y -= 10;
        }
        if (event.getKeyChar() == KeyEvent.VK_DOWN) {
            y += 10;
        }
    }
}

class MyGamePanel extends JPanel implements KeyListener {
    Enemy enemy;
    SpaceShip spaceShip;
    Missile missile;

    public MyGamePanel() {
        this.addKeyListener(this);
        this.requestFocus();
        setFocusable(true);

        enemy = new Enemy("./enemy.jpg");
        spaceShip = new SpaceShip("./spaceship.jpg");
        missile = new Missile("./missile.jpg");
        class MyThread extends Thread {
            public void run() {
                while (true) {
                    enemy.update();
                    spaceShip.update();
                    missile.update();
                    repaint();
                    try {
                        Thread.sleep(50);
                    } catch (Exception e) {
                    }
                }
            }

        }
        Thread t = new MyThread();
        t.start();
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        enemy.draw(g);
        spaceShip.draw(g);
        missile.draw(g);
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        spaceShip.keyPressed(e);
        missile.keyPressed(e,spaceShip.x,spaceShip.y);
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }

}

public class MissileGame extends JFrame {
    public MissileGame() {
        setTitle("MY Game");
        add(new MyGamePanel());
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500, 500);
        setVisible(true);
    }

    public static void main(String[] args) {
        new MissileGame();
    }

}

在missilegame軟件包中,已經有3個jpg文件。

但是您的代碼不會從missilegame軟件包中讀取。 它讀取文件系統上當前目錄中的文件。 當前目錄是執行java命令的目錄。 並且您的文件(不是必須)不在文件系統上。 它們是應用程序中嵌入的資源,應使用類加載器加載。

更換

img = ImageIO.read(new File(name));

通過

img = ImageIO.read(GraphicObject.class.getResourceAsStream("/missilegame/" + name));

並將"./enemy.jpg"替換為"enemy.jpg"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM