Hallo zusammen,
ich bin gerade fleißig an Quaxlis Tutorial dran. Doch irgendwie muss ich was falsch gemacht haben :autsch:.
Ich bin an der Stelle, wo eigentlich das Fenster mit dem animierten Hubschrauber sein sollte.
Aber aus irgendeinem Grund gibt er eine IOException aus, die sich auf die Bild-URL bezieht. Fehlermeldung wie folgt:
Jetzt hab ich den Pfad überprüft und am Anfang hatte ich aus versehen einen falschen Ordner angegeben, weil ich nicht bedacht hab, dass ja jede IDE andere Bezeichnungen benutzt war also logisch. Aber jetzt lädt er die Bilder immernoch nicht. ;(
Hier mal die Klasse:
Irgendwas was ich übersehen hab oder findet er vllt einfach den path nicht?
ich bin gerade fleißig an Quaxlis Tutorial dran. Doch irgendwie muss ich was falsch gemacht haben :autsch:.
Ich bin an der Stelle, wo eigentlich das Fenster mit dem animierten Hubschrauber sein sollte.
Aber aus irgendeinem Grund gibt er eine IOException aus, die sich auf die Bild-URL bezieht. Fehlermeldung wie folgt:
Code:
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1388)
at spiel.SpielFeld.loadPics(SpielFeld.java:127)
at spiel.SpielFeld.doInitializiations(SpielFeld.java:47)
at spiel.SpielFeld.<init>(SpielFeld.java:38)
at spiel.SpielFeld.main(SpielFeld.java:26)
Jetzt hab ich den Pfad überprüft und am Anfang hatte ich aus versehen einen falschen Ordner angegeben, weil ich nicht bedacht hab, dass ja jede IDE andere Bezeichnungen benutzt war also logisch. Aber jetzt lädt er die Bilder immernoch nicht. ;(
Hier mal die Klasse:
Java:
package spiel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.ListIterator;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SpielFeld extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
JFrame frame;
long delta = 0; //Berechnung der Zeit, die für den letzten Durchlauf benötigt wurde
long last = 0; //Speicherung der letzten Systemzeit
long fps = 0; //für Errechnung der FPS
Sprite copter;
Vector<Sprite> actors;
Vector<Sprite> painter;
public static void main (String [] args) {
new SpielFeld (800,600);
}
//Fenster fürs Spiel erstellen
public SpielFeld(int w, int h) {
this.setPreferredSize(new Dimension(w,h));
frame = new JFrame("Spieldemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.pack();
frame.setVisible(true);
doInitializiations();
Thread th = new Thread(this);
th.start();
}
private void doInitializiations() {
last = System.nanoTime();
BufferedImage[] heli = loadPics("pics/heli.gif", 4);
actors = new Vector<Sprite>();
painter = new Vector<Sprite>();
copter = new Sprite(heli,400,300,100,this);
actors.add(copter);
}
//Gameloop
@Override
public void run() {
while(frame.isVisible()) {
computeDelta(); //Methode zur Zeitberechnung
//Methoden für die Spiellogik
checkKeys();
doLogic();
moveObjects();
cloneVectors();
repaint();
try {
Thread.sleep(10);
} catch ( InterruptedException e) {}
}
}
@SuppressWarnings("unchecked")
private void cloneVectors() {
painter = (Vector<Sprite>) actors.clone();
}
private void computeDelta() {
delta = System.nanoTime() - last; //Errechnen der zeit für den Schleifendurchlauf in Nanosek
last = System.nanoTime(); //Speicherung der Aktuellen Systemzeit
fps = ((long) 1e9/delta); //Errechnung der Framerate
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.drawString("FPS: " + Long.toString(fps), 20, 10);
if (painter != null) {
for (ListIterator<Sprite> it = painter.listIterator(); it.hasNext();) {
Sprite r = it.next();
r.drawObjects(g);
}
}
}
private void checkKeys() {
}
private void doLogic() {
for(ListIterator<Sprite> it = actors.listIterator(); it.hasNext();) {
Sprite r = it.next();
r.doLogic(delta);
}
}
private void moveObjects() {
for(ListIterator<Sprite> it = actors.listIterator(); it.hasNext();) {
Sprite r = it.next();
r.move(delta);
}
}
private BufferedImage[] loadPics(String path, int pics) {
BufferedImage[] anim = new BufferedImage[pics];
BufferedImage source = null;
//URL pic_url = getClass().getResource("/pics/heli.gif");
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;
}
}
Irgendwas was ich übersehen hab oder findet er vllt einfach den path nicht?