[英]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.