Laden einer Bitmap / Eclipse-Problem?

vas

Mitglied
Hallo!


Ich habe folgendes kleines Problem: Das Laden und Anzeigen einer Bitmap mit ImageIO.read und Graphics.drawImage funktioniert nicht immer

Hier zunächst der Quellcode

Java:
   class GraphicPanel extends JPanel
   {
     
      protected void paintComponent(Graphics g)
      {
         BufferedImage img;
         super.paintComponent(g);
         
         try
         {
            img = ImageIO.read(new File("C:\\duke.gif"));
            // img = ImageIO.read(new File(".\\pics\\duke.gif"));
            g.drawImage(img, 50, 50, null);
         }
         catch (IOException e)
         {
            g.drawString("Fehler: Bild nicht geladen", 10, 10); 
         }
          
         return;
      }
   }

In dieser Variante funktioniert das ganze auch in Eclipse.

Wenn ich den auskommentierten Teil verwende (Bitmap im Projektverzeichnis\src\pics) gehts unter Eclipse aber nicht mehr! Die IOException wird geworfen. Bei direkter Verwendung der JDK-Tools javac.exe und java.exe läuft es aber problemlos.

pics\duke.gif kann ich im Projekt-Explorer sehen (Datei > Refresh)
g.drawImage(img, 50, 50, this); liefert dasselbe Ergebnis

Habe ich in Eclipse irgendwas falsch eingestellt? (Eclipse Indigo. Windows 7)

Gruss vas
 
Zuletzt bearbeitet:
Versuch' mal, dich an die Linux-Dateinamen-Konventionen zu halten - diese sind auch Standard in Java. Das bedeutet, verwende [c]/[/c] statt [c]\[/c]. Vllt. funktionierts. Evtl. geht's aber auch mit [c]file.getAbsoluteFile()[/c]
 
Wenn sich die Dateien im src-Ordner befinden und auch Streams akzeptiert werden, ist es imho besser diese mit
java.lang.Class#getResourceAsStream() zu laden.

Das wird dann erst recht nötig, wenn das Programm samt Bildern in eine jar gepackt wird.
 
War wohl ein allgemeineres Verständnisproblem meinerseits. Das aktuelle Verzeichnis "." unter Eclipse ist das Projektverzeichnis und in freier Wildbahn zur Laufzeit dann das Verzeichnis, in dem die <Programm>.class Datei liegt. Muss man also mit getClass().getResource(".") ermitteln. Der folgende Code funktioniert (d.h. lädt das gif) sowohl innerhalb Eclipse als auch ausserhalb:

Java:
   class GraphicPanel extends JPanel
   {
      protected void paintComponent(Graphics g)
      {
         BufferedImage img;
         super.paintComponent(g);
         
         try
         {
            String sPath = 
                   this.getClass().getResource("./pics").getFile().replaceAll("%20", " ");
                   // "%20" -> Leerzeichen " "
            img = ImageIO.read(new File(sPath + "/duke.gif"));
            g.drawImage(img, 50, 50, this);
         }
         catch (IOException e)
         {
            g.drawString("Fehler: Bild nicht geladen", 10, 10); 
         }
          
         return;
      }
   }
 

Neue Themen


Zurück
Oben