Java IO ne peut pas lire le fichier d'entrée?

J'ai juste commencé à apprendre le java et j'ai travaillé sur ce code pour un objet en mouvement avec la saisie au clavier. Je suis maintenant essayer d'ajouter dans le fond, mais il garde erroring avec:

javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at game.GameLoop.run(GameLoop.java:24)
    at java.lang.Thread.run(Unknown Source)

Le code que j'ai dans Game.java est:

package game;

import java.applet.*;
import java.awt.*;

public class Game extends GameLoop{

    public void init(){
        setSize(864,480);
        Thread th = new Thread(this);
        th.start();
        offscreen = createImage(864,480);
        d = offscreen.getGraphics();
        addKeyListener(this);
    }

    public void paint(Graphics g){
        d.clearRect(0, 0, 864, 480);
        d.drawImage(background, 0, 0, this);
        d.drawRect(x, y, 20, 20);
        g.drawImage(offscreen, 0, 0, this);
    }

    public void update(Graphics g){
        paint(g);
    }
}

Et voici mon GameLoop.java:

package game;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class GameLoop extends Applet implements Runnable, KeyListener{
public int x, y;
public Image offscreen;
public Graphics d;
public boolean up, down, left, right;
public BufferedImage background;
public void run(){
x = 100;
y = 100;
try {
background = ImageIO.read(new File("background.png"));
} catch (IOException e1) {
e1.printStackTrace();
}
while(true){
x = 100;
y = 100;
while(true){
if (left == true){
x-=4;
}
if (right == true){
x+=4;
}
if (up == true){
y-=4;
}
if (down == true){
y+=4;
}
if ( x <= 0 ){
x = 0;
}
if ( y <= 0 ){
y = 0;
}
if ( x >= 843 ){
x = 843;
}
if ( y >= 460 ){
y = 459;
}
repaint();
try{
Thread.sleep(20);
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
//@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == 37){
left = true;
}
if(e.getKeyCode() == 38){
up = true;
}
if(e.getKeyCode() == 39){
right = true;
}
if(e.getKeyCode() == 40){
down = true;
}
}
//@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == 37){
left = false;
}
if(e.getKeyCode() == 38){
up = false;
}
if(e.getKeyCode() == 39){
right = false;
}
if(e.getKeyCode() == 40){
down = false;
}
}
//@Override
public void keyTyped(KeyEvent e) {
}
}

Désolé pour le montage je n'arrive pas à obtenir tout cela en l' `, et je vais aussi corriger le code désordre, mais avez-vous les gars avez des idées de ce qui est à l'origine de cette erreur, il y a un fichier dans le répertoire src dir appelé arrière-plan.png, il est très basique et fait dans MS paint, si cela aide.

Grâce.

  • Plusieurs IDEs besoin de différents emplacements pour les fichiers comme du texte ou de l'image des ressources. Essayez de copier l'image à plusieurs endroits différents, probablement un niveau au-dessus src, pour voir si cela résout-il.
  • Est ur fichier dans le même répertoire ?
  • Suffit d'utiliser l'adressage absolu donc il n'y aura pas d'ambiguïté, sauf si l'image est tenue à la demande du fichier jar. Puis vous auriez besoin d'utiliser l'image comme une ressource, pas un fichier.
  • Merci Chris, je l'ai ajouté à tous mes répertoires, je vais aller à travers et de savoir ce que c'était qu'il fixe. Je suis à l'aide d'eclipse.
  • Pour vérifier le chemin par défaut du répertoire: Fichier = new File("."); Système.out.println(ici.getCanonicalPath());
  • J'ai eu un problème similaire a une ou deux semaines, je suis assez sûr avec Eclipse le niveau au-dessus src est celui que vous voulez. Content d'avoir pu aider!
  • Deuxième question, je suis en cours d'exécution dans une applet java, Comment puis-je supprimer ces affreux bars disant applet et applet commencé?
  • Il a été le dans le répertoire bin. merci quand même
  • Les Applets ne va pas (dans la plupart des cas) vous permettent de lire des fichiers. Vous aurez besoin de emeded la ressource dans le Bocal notre déployer dans le même contexte. Mieux utiliser JPanel et JFrame
  • background = ImageIO.read(new File("background.png")); J'ai utilisé ce à l'intérieur d'un try catch. Il fonctionne!
  • Et l'image a été chargée ..
  • Lorsque mis à l'intérieur du répertoire bin. Je crois que j'ai posté le code dans le post original. J'ai utilisé ce même code, et ça fonctionne.
  • De bons conseils en général, mais c'est pour une demande de ressources (je crois) dans une applet (comme par code). En conséquence, je cherche à utiliser un URL en place de la File.
  • Jetez un oeil à cette répondre. Espérons qu'il trie les choses pour vous 🙂

InformationsquelleAutor Angus Moore | 2012-11-10