# Spiele Tutorial.. Findet Bilddateien nicht



## Mr. Moon (4. Sep 2013)

Hallo, ich mache zur Zeit dieses Tutorial: http://archon.bplaced.net/bain09/Studium/Programmieren/Java/Turorials/Spiele/Tutorial%20f%FCr%20Java-Spiele%20.pdf

Ich habe alles genauso gemacht wie im Tutorial bis zu dem Punkt wo man angeblich den Helikopter steuern kann.  Der öffnet zwar das Fenster aber ich habe 0 FPS und zur Laufzeit bekomme ich folgenden Fehler: Exception in thread "main" java.lang.IllegalArgumentException: input == null!
	at javax.imageio.ImageIO.read(Unknown Source)
	at GamePanel.loadPics(GamePanel.java:64)
	at GamePanel.doInitializations(GamePanel.java:49)
	at GamePanel.<init>(GamePanel.java:42)
	at GamePanel.main(GamePanel.java:153)

Ich habe es auch schon mit absolutem Pfad probiert, sowie \ und / .. Ich habe echt keine Ahnung und bin für jede Hilfe dankbar.


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

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.Vector;

public class GamePanel extends JPanel implements Runnable, KeyListener {
    
	private static final long serialVersionUID = 1L;
	boolean game_running = true;
	
	long delta = 0;
	long last  = 0;
	long fps   = 0;
	
	boolean up    = false;
	boolean down  = false;
	boolean left  = false;
	boolean right = false;
	int speed = 50;
	Sprite mj;
	Vector<Sprite> actors;
	
	public GamePanel(int w, int h) {
		this.setPreferredSize(new Dimension(w,h));
		JFrame frame = new JFrame("BomberMJ");
		frame.setLocation(100,100);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.addKeyListener(this);
		frame.add(this);
		frame.pack();
		frame.setVisible(true);
		doInitializations();
	}
	
	private void doInitializations() {
	    last = System.nanoTime();
		
	    actors = new Vector<Sprite>();
	    BufferedImage[] player = this.loadPics("pics/test.gif", 4);
	    mj = new Sprite(player, 400, 300, 100, this);
	    actors.add(mj);
		Thread t = new Thread(this);
	    t.start();
	}
	
	private BufferedImage[] loadPics(String path, int pics) {
		
		BufferedImage[] anim = new BufferedImage[pics];
		BufferedImage source = null;
		
		URL pic_url = getClass().getClassLoader().getResource(path);
		
		try {
			source = ImageIO.read(pic_url);
		}
		
		catch(IOException e) {
			
		}
		
		for(int x = 0; x < pics; x++) {
			anim[x] = source.getSubimage(x * source.getWidth() / pics, 0, source.getWidth() / pics, source.getHeight());
		}
		
		return anim;
	}
	private void computeDelta() {
		delta = System.nanoTime() - last;
		last  = System.nanoTime();
		
		fps = ((long) 1e9) / delta;
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		g.setColor(Color.red);
		g.drawString("FPS: " + Long.toString(fps), 20, 10);
		
		if(actors != null) {
			for(Drawable draw : actors) {
				draw.drawObjects(g);
			}
		}
	}
	
	private void doLogic() {
		for(Movable mov : actors) {
			mov.doLogic(delta);
		}
	}
	
	private void moveObjects() {
		for(Movable mov : actors) {
			mov.move(delta);
		}
	}
	
	private void checkKeys() {
		if(up) {
			mj.setVerticalSpeed(-speed);
		}
		
		if(down) {
			mj.setVerticalSpeed(speed);
		}
		
		if(right) {
			mj.setHorizontalSpeed(speed);
		}
		
		if(left) {
			mj.setHorizontalSpeed(-speed);
		}
		
		if(!up && !down) {
			mj.setVerticalSpeed(0);
		}
		
		if(!left && !right) {
			mj.setHorizontalSpeed(0);
		}
	}
	public void run() {
		while(game_running) {
		    computeDelta();
		    checkKeys();
		    doLogic();
		    moveObjects();
		    
		    repaint();
			
			
			try {
				Thread.sleep(10);
			}
			
			catch (InterruptedException e) {}
		}
	}
	public static void main(String[] args) {
		
		new GamePanel(800,600);
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		
		if(e.getKeyCode() == KeyEvent.VK_UP) {
			up = true;
		}
		
		if(e.getKeyCode() == KeyEvent.VK_DOWN) {
			down = true;
		}
		
		if(e.getKeyCode() == KeyEvent.VK_LEFT) {
			left = true;
		}
		
		if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
			right = true;
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
		if(e.getKeyCode() == KeyEvent.VK_UP) {
			up = false;
		}
		
		if(e.getKeyCode() == KeyEvent.VK_DOWN) {
			down = false;
		}
		
		if(e.getKeyCode() == KeyEvent.VK_LEFT) {
			left = false;
		}
		
		if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
			right = false;
		}
	}

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


----------



## Mr. Moon (4. Sep 2013)

Dieses "[]"   sind 2 eckige Klammern. Ist irgendwie beim kopieren was falsch gelaufen.


----------



## Toriath (4. Sep 2013)

Benutzt du zufällig IntelliJ?

Ich hatte das Problem das seltsamer Weise keine GIF Bilder geladen werden konnten. 
Versuche einmal anstelle des GIFs ein PNG zu verwenden. (Einfach mit Paint oder so das Format ändern^^)
Ich habe absolut keine Erklärung für dieses Problem und habe selbst Stunden damit Verbracht eine Lösung zu finden. Nur das PNG konnte helfen. 
Bei Ecplise im Gegenzug haben GIFs problemlos funktioniert.

MfG,
Toriath

EDIT: Ich wäre immernoch glücklich wenn mir jemand erklären könnte warum dies so ist


----------



## Mr. Moon (4. Sep 2013)

Nee mit png funktionierts immer noch nicht.. Ich benutze Eclipse


----------



## Toriath (4. Sep 2013)

Nun, dann probiere mal 
	
	
	
	





```
.getClassLoader()
```
 weg zu lassen oder anstelle davon: 

```
URL pic_url = getClass().getClassLoader().getResource(path);        
        try {
            source = ImageIO.read(pic_url);
        }
        
        catch(IOException e) {            
        }
```

Das hier zu verwenden:

```
InputStream inputStream = getClass()getResourceAsStream(path);
        
        try {
            source = ImageIO.read(inputStream);
        }
        
        catch(IOException e) {
            
        }
```

Bin mir grade nicht 100% sicher aber ich denke so sollte es richtig sein.


----------



## Mr. Moon (4. Sep 2013)

Das mit dem obigen Code geht auch nicht.  Ich habe es jetzt auf meinem anderen Linux Rechner getestet und da geht es. Kann mir einer vielleicht sagen, woran das liegen könnte?

edit: Ich benutze auf meinem Hauptrechner Windows 7


----------



## Mr. Moon (4. Sep 2013)

Ich habs hingekriegt. Ich musste den "pics" Ordner in Eclipse reinziehen.


----------

