# Jbuilder Problem



## Lazarus1 (20. Jan 2005)

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.


```
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?

Für Hilfe besten Dank

Cu Lazarus


----------



## AlArenal (20. Jan 2005)

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).


```
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.


----------



## Lazarus1 (21. Jan 2005)

Funktioniert leider immer noch nicht. Hat das vielleicht was mit der Umwandlung in eine URL zu tun?


  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.exit(0);
         return null;
       }
     }


  public void paint(Graphics g) {  
    ImageIcon fileurl = new ImageIcon(spaceinvaders.SpaceInvadersFrame.class.getResource("res/bicho.gif"));
    String param = fileurl.toString();
    BufferedImage bicho = loadImage(param);
    g.drawImage(bicho, 40, 40,this);

     }



C:\Dokumente und Einstellungen\Damir\jbproject\spaceinvaders\src\spaceinvaders\res

da hab ich nun die Bilder drin.

Compiler sagt wenn ich das richtig verstanden hab null Referenz oder Objekt ist null[/code]


----------



## Lazarus1 (21. Jan 2005)

BufferedImage bicho = loadImage("res/bicho.gif");
    g.drawImage(bicho, 40, 40,this);

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


----------



## AlArenal (21. Jan 2005)

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.

Getan hätte es auch diese Variante:


```
BufferedImage bicho = loadImage(SpaceInvadersFrame.class.getResource("res/bicho.gif"));
```

Wobei SpaceInvadersFrame nötigenfalls von hätte importiert  oder mit Package-Pfad versehen werden müssen.


----------

