Habe ein Problem mit dem JBuilder. Also ich bekomme kein Bild geladen. Ich habe das Bild in dem Unterverzeichnis res im classes Ordner abgelegt. Und trotzdem kann er es nicht laden. Wenn ich ohne den JBuilder was mache kann ich ohne Problema das bild in ein JFrame laden. Ohne Fehlermeldung. Der Code ist komplett der selbe.
Code:
public Invaders() {
JFrame ventana = new JFrame("Invaders");
JPanel panel = (JPanel)ventana.getContentPane();
setBounds(0,0,WIDTH,HEIGHT);
panel.setPreferredSize(new Dimension(WIDTH,HEIGHT));
panel.setLayout(null);
panel.add(this);
ventana.setBounds(0,0,WIDTH,HEIGHT);
ventana.setVisible(true);
ventana.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public BufferedImage loadImage(String nombre) {
URL url=null;
try {
url = getClass().getClassLoader().getResource(nombre);
return ImageIO.read(url);
} catch (Exception e) {
System.out.println("No se pudo cargar la imagen " + nombre +" de "+url);
System.out.println("El error fue : "+e.getClass().getName()+" "+e.getMessage());
System.exit(0);
return null;
}
}
public void paint(Graphics g) {
BufferedImage bicho = loadImage("res/bicho.gif");
g.drawImage(bicho, 40, 40,this);
}
public static void main(String[] args) {
Invaders inv = new Invaders();
}
}
laut dem code muss ich doch die bilder da ablegen oder weiß jemand ob es da eine Besonderheit gibt.
Und nochwas ich kann meine Programme wenn mit JBuilder geschrieben nicht normal über die Kommandozeile mit java Programmname starten auch wenn ich mich in dem class Verzeichnis befinde. Hat jemand Idee warum?
Das Ablegen in /classes bringt nichts. Den Ordner leert der JBuilder nämlich ehe er einen neuen Make erstellt.
Leg die Bilder in einem Unterordner in /src ab und zwar am einfachsten in einem Unterordner von dem Ordner aus, in dem sich die Klassen befinden, die auf die Bilder zugreifen (dann haste das Ganze auch logisch strukturiert). Folgende Zeile liefert den Pfad zur Datei als String und kann beispielsweise als Paramater zur Erzeugnung von ImageIcon geneutzt werden (oder einer anderen Klasse die nen String als URL verwenden kann).
Code:
ImageIcon imageIcon = new ImageIcon(MeineKlasse.class.getResource("image/bild.gif"));
Wobei ich davon ausgehe dass die Klasse, in der du diesen Code verwendest, MeineKlasse heißt und im /src-Ordner unterhalb ein Verzeichnis /image mit der Datei bild.gif exisitert.
Wenn du von außen Dateien in den /src-Ordner kopierst, oder sonstwie Änderungen vornimmst, musst du im Projektfenster noch auf den Button "Aktualsiieren" klicken, ehe du neu kompilierst.
jetzt hab ich die Verzeichnisstuktur so gemacht wie oben gesagt und übergebe dann die url ohne den Umweg über die ImageIcon Variante und jetzt klappts doch. Komisch
DAs mit dem ImageIcon war nur als Beispiel gedacht. Über getResource() mache ich das weil ich hier in einer Anwendung alle Icons (für Buttons und so) in einem Verzeichnis habe und dann relativ von der Hauptklasse den PFad nutze, da so Angaben wie "../../resources/images/bild.png" nicht funktionieren.
Das dein erstes Beispiel nicht funzte überrascht mich nicht, war auch arg umständlich konstruiert von dir.