Image Loader lädt Bild nicht

Moin,
meine IL-Loader Klasse lädt das Bild nicht.
Es gibt keine Exception, die Datei ist vorhanden, aber es lädt nicht


IL- Klasse:
Code:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class IL {

    BufferedImage ibg;
   
    public IL() {
        try {
            ibg = ImageIO.read(new File("rsc/bg.png"));
        } catch (IOException e) {
            System.out.println("Bild nicht erreichbar");
           
        }
    }
   
}

Draw Klasse:
Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.ImageObserver;

import javax.swing.JLabel;
public class Draw extends JLabel{
    IL i = new IL();
    Gui gui = new Gui();
    protected void paintComponent(Graphics g) {
       
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
   
       
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
       
        g.drawImage(i.ibg, 20, 20, null);
       
        g.setColor(new Color(205, 38, 38, 200));
        g.fillRect(0, 0, gui.width, 100);
       
        g.setColor(new Color( 238, 216, 174,255));
        g.drawLine(gui.width/2, 100, gui.width/2,gui.height);
        g.drawLine(0, 100, gui.width, 100);
   
       
       
        repaint();
   
    }
}

Gui- Klasse:
Code:
import javax.swing.JFrame;
import Actions.MouseHandler;

public class Gui {
JFrame jf;
Draw d;
public final int width = 1280;
public final int height = 720;
public void createGui(){
 
  jf = new JFrame("MyOwnGame");
  jf.setSize(width, height);
  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  jf.setLocationRelativeTo(null);
  jf.addMouseWheelListener(new MouseHandler());
  jf.setResizable(true);
 
  d = new Draw();
  d.setSize(width, height);
  d.setVisible(true);
  d.requestFocus();
  d.addMouseListener(new MouseHandler());
  d.addMouseMotionListener(new MouseHandler());
  d.addMouseWheelListener(new MouseHandler());
 
  jf.add(d);
 
 
  jf.setVisible(true);
}
 
Ich finde diese Konstruktion sehr eigenartig:
Java:
public class Gui {
    Draw d;
    public void createGui(){
        d = new Draw();
    }
}

public class Draw extends JLabel {
    Gui gui = new Gui();
}
In der Klasse Gui erzeugst du eine Instanz van Draw, die dann eine weitere Instanz von Gui erzeugt?
 
Das kann nicht gut gehen. Es handelt sich dabei um 2 unterschiedliche Gui-Objekte die miteinander nichts zu tun haben.
Nur weil du 2 Kisten in einen Raum stellst haben sie noch lange nicht den selben Inhalt 😉

Edit: repaint() in paintComponent(..) aufzurufen ist eine sehr schlechte Idee. repaint() ruft quasi paintComponent auf .. somit hast du eine Endlosschleife ..
 
Das kann nicht gut gehen. Es handelt sich dabei um 2 unterschiedliche Gui-Objekte die miteinander nichts zu tun haben.
Nur weil du 2 Kisten in einen Raum stellst haben sie noch lange nicht den selben Inhalt 😉

Edit: repaint() in paintComponent(..) aufzurufen ist eine sehr schlechte Idee. repaint() ruft quasi paintComponent auf .. somit hast du eine Endlosschleife ..

Sprich, was soll ich tun?:/ Habe echt keine Ahnung, was ich da machen soll, um das zu fixen🙁
 
Füge deiner Draw-Klasse einen Konstruktor hinzu, der ein Gui-Objekt erwartet und übergib bei Erstellung des Draw-Objektes das aktuelle Gui-Objekt.

PS: Wird dir eigentlich überhaupt was angezeigt oder fehlt nur das Bild?
 
Eigentlich sollte der Code zum Laden das Bildes funktionieren.
Ändere mal das, was ich oben angesprochen habe und dann geh mal mit dem Debugger durch (oder mach Konsolenausgaben) und schau ob dein Image-Objekt null ist.
 
Eigentlich sollte der Code zum Laden das Bildes funktionieren.
Ändere mal das, was ich oben angesprochen habe und dann geh mal mit dem Debugger durch (oder mach Konsolenausgaben) und schau ob dein Image-Objekt null ist.


Mir ist etwas komisches bei den Bildern aufgefallen. Wenn ich sie in Java in meinem rsc- Folder öffne erscheint manchmal das Bild und manchmal ein schwarzer kleiner Kasten mit einem x in der Mitte in der oberen linken Ecke.
 

Neue Themen


Zurück
Oben