PNG Datei wird nur manchmal geöffnet

Ich versuche gerade eine kleine Simulation zu Programmieren. Dabei habe ich der einfachheit halber am Anfang nur g.fillRect genutzt. Jetzt Funktioniert alles so wie ich will, und deshalb möchte ich die Kästchen zu kleinen Bildchen machen. Mein Problem ist, in manchen Klassen funktioniert es, und in einer anderen Klasse nicht. Deshalb muss es ja möglich sein auf das Bild zuzugreifen. Je nach der Art wie ich darauf zugreife bekomme ich eine NPE oder Can't read Input File Ich benutze übrigend Eclipse.

Hier bekomme ich eine NullPointerException, in der Zeile in der ich in meiner Main die Rendermethode dieser Klasse aurufe:

Java:
public class Menu(){
   
    BufferedImage Sprite;
   
    public Menu(){
        try {
            Sprite = LoadImage("Fahrgeschaefte.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    public void render(Graphics g) {
        g.drawImage(Sprite, 625, 125, 675, 175, 0, 0, 32, 32, null);
    }
   
    public BufferedImage LoadImage(String pathrelativetothis) throws IOException {
        URL url = this.getClass().getResource(pathrelativetothis);
        BufferedImage img = ImageIO.read(url);
        return img;
    }
}
Mit dem bekomme ich eine
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)

Exception, in der Zeile mit dem this.Sprite = ImageIO.read(file);

Code:
public class Menu{
   
    public BufferedImage Sprite;

    public BuyMenu() {
        File file = new File("Fahrgeschaefte.png");
       
        try {
            this.Sprite = ImageIO.read(file);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
   
    public void render(Graphics g){
    g.drawImage(Sprite, 625, 125, 675, 175, 0, 0, 32, 32, null);
    }
Wie schon erwähnt funktioniert die erste Variante in einer anderen Klasse. Einziger Unterschied ist, dass die Methode LoadImage() in einer Superklasse ist und nicht in der gleichen. Das sollte aber theoretisch ja nichts ändern.
 
Okay, ich habe sowohl in der Klasse in der es funktioniert als auch in der Klasse in der es leider noch nicht klappt, ein SysOut nach dem
Java:
URL url = this.getClass().getResource(pathrelativetothis);
eingefügt. Bei beidem komme ich auf das gleiche Ergebniss, da ich alles im gleichen Package habe. Wenn ich nur this.getClass() ausgeben lasse komme ich auch auf das gleiche Ergebniss
(file:/C:/Users/Thoralf/neuerWorkspace/IdeeV2/bin/thoralf/game/Fahrgeschaefte.png)
nur mit anderer Klasse am Ende, was ja auch logisch ist. Trotzdem wird kein Bild angezeigt
 
Sorry, das war von mir Schwammig ausgedrückt. Ich bekam in der Zeile in der ich die render Methode aufrufe eine Fehlermeldung.

Das ist jetzt aber vollkommen egal, weil ich die Lösung gefunden habe:p:eek::eek:
Das problem war, dass das Programm nicht alle Konstrucktoren abarbeiten konnte, bis die RenderMethode das erste mal ausgeführt wurde. Dadurch besaßen manche Bilder noch den Wert null und konnten nicht gezeichnt werden.
Ich habe jetzt gesagt, du machst erst nach der Zeit xyz die Rendermethoden, und jetzt funktioniert es ;)

Trotzdem danke für deine Hilfe;)
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben