drawImage Fehlersuche

JavaNo0b

Mitglied
Guten Morgen liebe Java Gemeinde,

ich muss morgen leider früh raus und muss meine Suche nun ohne Gewissheit einstellen...
Leider bekomm ich es nicht gebacken, dass meine header.png angezeigt wird, am Pfad liegt es definitiv nicht.

Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;


public class InitGui extends JPanel {
    
    //Fenster
    JFrame jfr;
    Container contentPane;
    
    //JPanel
    JPanel header;
    JPanel anzeige;
    JPanel spielfeld;
    
    //Komponenten
    BufferedImage player;
    
    //Textfelder zu Namenseingabe
    JTextField nameRed;
    JTextField nameBlue;
    //Button zur Eingabespeicherung
    JButton buttonRed;
    JButton buttonBlue;
    //Lebenspunkte anzeigen lassen
    JTextField lebenspunkteRed;
    JTextField lebenspunkteBlue;
    
    public InitGui() {
        initUI();
        createMenu();
    }
    
    public void initUI() {
        jfr = new JFrame("Who is the real SisterFister?");
        jfr.setSize(1000, 700);
        jfr.setLocationRelativeTo(null);
        jfr.setBackground(Color.WHITE);
        jfr.setDefaultCloseOperation(jfr.EXIT_ON_CLOSE);
        jfr.setResizable(false);
        
        contentPane = jfr.getContentPane();
        jfr.setVisible(true);
    }
    
     //Menü erstellen
    public void createMenu(){
        //Menü -> JmenuBar -> Jmenu -> JMenuItem

        //Menüleiste erstellen
        JMenuBar jMenuBar = new JMenuBar();

        //Menüpunkte erstellen
        JMenu highscoreList = new JMenu("Hall of Fame");
        JMenu logoutMenu = new JMenu("Fenster schließen");

        //Menüpunkte an Menüleiste heften
        jMenuBar.add(highscoreList);
        jMenuBar.add(logoutMenu);

        //Menüpunkt Unterpunkte erstellen
        JMenuItem showList = new JMenuItem("Highscoreliste", new ImageIcon("src/images/trophy.png"));
        JMenuItem exitItem = new JMenuItem("Ausloggen", new ImageIcon("src/images/close.png"));
        
        //Shortcut erstellen -> Mit Alt & E wird Anwendung geschlossen
        exitItem.setMnemonic(KeyEvent.VK_E);
        exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.ALT_MASK));
        
        //wenn exitItem gedrückt wird, beendet sich die Anwendung
        exitItem.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }           
        });
        
        
        //Menüpunkt Unterpunkte hinzufügen
        highscoreList.add(showList);
        logoutMenu.add(exitItem);

        //Menüleiste an jFrame heften
        jfr.setJMenuBar(jMenuBar);
        repaint();
    }
    
    
        public void paintComponent(Graphics g){
            try {
                player = ImageIO.read(new File("./src/images/header.png"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            super.paintComponent(g);
            g.drawImage(player, 0, 0, 300, 300, null);
 
        }
    
 
    
    public static void main(String[] args){
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new InitGui();
            }
        });
    }

}

Ich komm einfach nicht dahinter wo der Fehler steckt ... würd mich wirklich freuen, wenn einer von euch Abhilfe schaffen könnte ..

MfG
 

mihe7

Top Contributor
am Pfad liegt es definitiv nicht.
Ach, das würde ich nicht ausschließen. Startest Du denn die Anwendung aus dem Verzeichnis, in dem sich auch src befindet?

Unabhängig davon: Ressourcen lädt man nicht über das Dateisystem sondern über den ClassLoader, d. h. mit Hilfe der Methoden Class#getResource bzw. #getResourceAsStream.

Java:
player = ImageIO.read(getClass().getResource("/images/header.png"));

Dabei ist zu beachten, dass sich der Pfad auf den Classpath bezieht (daher taucht hier auch kein src-Verzeichnis auf). Wo genau sich das images-Verzeichnis in Deinem Projekt befinden muss, hängt vom verwendeten Buildsystem ab. Da ich nicht weiß, was Du verwendest, nur mal eine grobe Herangehensweise:

Wenn direkt unter src Java-Dateien und Pakete liegen, könnte es tatsächlich sein, dass sich der Ordner unter src/images befinden muss. In der Regel gibt es aber ein extra Verzeichnis für Ressourcen. Wenn die Java-Dateien und Paketen und src/main/java liegen, wirst Du die Bilder wahrscheinlich unter src/main/resources/images ablegen müssen.

Abgesehen davon ist es gar keine gute Idee, das Bild während des Zeichnens zu laden (und schon gar nicht jedesmal).
 

JavaNo0b

Mitglied
Am Datei Pfad liegt es nicht, weil ich eine zweite Datei im gleichen Package habe in dem !exakt! das gleiche in paintComponent() steht wie im anderen. Also beide im gleichen Verzeichnis und beide greifen auf das Bild zu. Funktioniert aber nur bei der andere Datei.
Welche Methode wäre denn klüger, um den Header permanent zu laden?

Und sieht jemand meinen Fehler?
Bin noch ein Java Anfänger :D
 

mihe7

Top Contributor
K

kneitzel

Gast
Also wenn das Problem an der Zeile player = ImageIO.read(new File("./src/images/header.png")); liegen soll:
Hast du das einfach einmal aufgedröselt? Wenn Du die File Instanz erzeugt hast: hast Du die einmal geprüft? Besonders das getAbsolutePath() wäre hier z.B. interessant um zu sehen, wo er nach der Datei schaut und um sicher zu stellen, dass die Datei da ist ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
U drawImage mit EPS AWT, Swing, JavaFX & SWT 0
A Problem mit drawImage AWT, Swing, JavaFX & SWT 1
M Graphics.drawImage von unten nach oben abbilden lassen AWT, Swing, JavaFX & SWT 6
P 2D-Grafik g2.drawImage() langsam AWT, Swing, JavaFX & SWT 110
L Graphics.drawImage() - Output-Größe entspricht nicht Parametern AWT, Swing, JavaFX & SWT 10
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
P Swing Skalieren mit DrawImage macht Linien kaputt AWT, Swing, JavaFX & SWT 6
G .ico drawImage AWT, Swing, JavaFX & SWT 5
B drawImage funktioniert nicht AWT, Swing, JavaFX & SWT 4
B drawImage auf JPanel bleibt ohne Auswirkungen AWT, Swing, JavaFX & SWT 9
K Graphics.drawImage() sehr schnell AWT, Swing, JavaFX & SWT 5
M Graphics.drawImage verlangsamt sich plötzlich AWT, Swing, JavaFX & SWT 15
0 AWT Graphics2D.drawImage() funktioniert nicht mehr korrekt mit Core i7 AWT, Swing, JavaFX & SWT 4
G Graphics.drawImage() AWT, Swing, JavaFX & SWT 6
? Problem mit drawImage: bei Frame ok, bei JPanel nicht AWT, Swing, JavaFX & SWT 4
F Problem mit drawImage() AWT, Swing, JavaFX & SWT 6
M drawImage bremst GUI AWT, Swing, JavaFX & SWT 2
I drawImage AWT, Swing, JavaFX & SWT 4
B drawImage() hängt! AWT, Swing, JavaFX & SWT 18
O performance g2d.drawImage() AWT, Swing, JavaFX & SWT 17
L Bildbewegung mit g.drawImage AWT, Swing, JavaFX & SWT 3
K g.DrawImage unter paintComponent klappt nur beim 1. Aufruf AWT, Swing, JavaFX & SWT 3
S kurze Frage zu drawImage AWT, Swing, JavaFX & SWT 12
F Endlosschleife bei drawImage() AWT, Swing, JavaFX & SWT 4
L Gezeichnetes Image mit DrawImage überzeichnen AWT, Swing, JavaFX & SWT 3
M drawImage mit seltsamen verhalten AWT, Swing, JavaFX & SWT 2
Monokuma Breakout - Fehlersuche AWT, Swing, JavaFX & SWT 29
W Fehlersuche AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben