Images laden nicht

H

HackerBanane

Mitglied
Hallo und danke schonmal für jede Antwort!
Ich lerne jetzt seit vielleicht einem halben Jahr Java und möchte für meine Brüder, die sehr viel Fifa spielen eine kleines 2D
Füßballspiel programmieren, bei dem bei dem Titelbildschirm immer zuffällig eines von drei Bildern kommt.
Ich programmiere mit Java 14 und nutze Eclipse.
Für den Titelbildschirm nutze ich zwei Klassen: eine für alle Variablen (Var.java) und eine für die GUI (Gui.java).
Ich habe mit dem Titelbirlschirm angefangen und schon taucht der erste Fehler auf. Die Bilder werden nicht geladen und ich
schaue in ein leeres JFrame.
In der Ausgabe kommen auch keine Fehlermeldungen.
LG
Laurens

(Ich habe leider vergessen wie ich den Quelltext anhänge)

Hier ist der Quelltext mit den beiden Klassen:

Java:
import java.awt.Image;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Var {
 
    public static Random randomTitleFrame = new Random();
    public static int r = randomTitleFrame.nextInt(3);
    
    public static JFrame jf1;
 
    public static JPanel jpl1;
 
    public static JLabel lbl1;
 
    public static Image title1;
    public static Image title2;
    public static Image title3;

}
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Gui {
 
    public void Gui() {
     
        Var.jf1 = new JFrame("Fußball Akkon");
        Var.jf1.setSize(1650, 1100);
        Var.jf1.setResizable(false);
        Var.jf1.setLayout(null);
        Var.jf1.setLocationRelativeTo(null);
        Var.jf1.setDefaultCloseOperation(Var.jf1.EXIT_ON_CLOSE);
        Var.jf1.setVisible(true);
     
    }
 
    public void paint(Graphics g) {
     
        Graphics2D f2 = (Graphics2D)g;
     
        if(Var.r == 0) {
         
            Var.lbl1 = new JLabel();
            Var.lbl1.setSize(1650, 1100);
            Var.lbl1.setIcon(new ImageIcon((getClass().getResource("Title.png"))));
            Var.jpl1.add(Var.lbl1);
            Var.jf1.add(Var.jpl1);
            VarTest.jf1.validate();
         
        } else if(Var.r == 1) {
         
            Var.lbl1 = new JLabel();
            Var.lbl1.setSize(1650, 1100);
            Var.lbl1.setIcon(new ImageIcon((getClass().getResource("Title2.png"))));
            Var.jpl1.add(Var.lbl1);
            Var.jf1.add(Var.jpl1);
            Var.jf1.validate();
         
        } else if(Var.r == 2) {
         
            Var.lbl1 = new JLabel();
            Var.lbl1.setSize(1650, 1100);
            Var.lbl1.setIcon(new ImageIcon((getClass().getResource("Title3.png"))));
            Var.jpl1.add(Var.lbl1);
            Var.jf1.add(Var.jpl1);
            Var.jf1.validate();
         
        }
     
    }
 
 
}
 
Zuletzt bearbeitet von einem Moderator:
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Hast du zufällig irgendein Youtube-Video geguckt und von dort übernommen, dass man eine Klasse Var hat?
 
kneitzel

kneitzel

Top Contributor
Also mehrere Dinge:

Die Methode paint wird nirgends aufgerufen. Daher kann das da auch nie statt finden.

Es gibt paint / paintComponent bei Swing Komponenten / Frames, aber da sollte das Fenster / die Komponente nur neu gemalt werden. Da werden keine neuen Komponenten hinzu gefügt. Der Code würde mit in den Konstruktor von Gui gehören.

Damit dieses Überladen wo es nichts zu überladen gibt auch auffällt, sollte man bei solchen Methoden immer ein @Override davor setzen. Hättest Du vor der paint Methode diese Annotation gesetzt, dann hätte der Compiler Dich auch auf den Fehler hingewiesen.
 
H

HackerBanane

Mitglied
Also mehrere Dinge:

Die Methode paint wird nirgends aufgerufen. Daher kann das da auch nie statt finden.

Es gibt paint / paintComponent bei Swing Komponenten / Frames, aber da sollte das Fenster / die Komponente nur neu gemalt werden. Da werden keine neuen Komponenten hinzu gefügt. Der Code würde mit in den Konstruktor von Gui gehören.

Damit dieses Überladen wo es nichts zu überladen gibt auch auffällt, sollte man bei solchen Methoden immer ein @Override davor setzen. Hättest Du vor der paint Methode diese Annotation gesetzt, dann hätte der Compiler Dich auch auf den Fehler hingewiesen.
Vielen Dank, aber wie sähe das dann im Code aus?
 
kneitzel

kneitzel

Top Contributor
Der Code aus der Paint Methode kommt noch in den Konstruktor. Natürlich ohne die lokale Variable f2.

Generell ist das alles aber keine Gute Idee. static sollte bis auf Konstanten und die main Methode nicht verwendet werden.

Dann könnte man noch sinnvolle Namen vergeben - und dann kommt so etwas heraus (ungetestet):
Java:
import javax.swing.*;
import java.util.Random;

public class Gui {

    private Random random = new Random(); // Kein verirrender Name! Das ist ja kein Frame!
    private JFrame frame; // Instanzvariable - Name aussagekräftig - nicht jf1!

    public Gui() {
        frame = new JFrame("Fußball Akkon");
        frame.setSize(1650, 1100);
        frame.setResizable(false);
        frame.setLayout(null);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // EXIT_ON_CLOSE ist eine statische Variable und wird nicht auf einer Instanz benutzt!

        String resource = "";
        switch (random.nextInt(3)) {
            case 0:
                resource = "Title.png";
                break;

            case 1:
                resource = "Title1.png";
                break;

            case 2:
                resource = "Title2.png";
                break;
        }

        JLabel label = new JLabel(); // Vernünftiger Name - kein jl1 oder so!
        label.setSize(1650, 1100);
        label.setIcon(new ImageIcon((getClass().getResource(resource))));
        JPanel panel = new JPanel(); // Panel wurde nie erzeugt! Und natürlich Name, der lesbar ist ...
        panel.add(label);
        frame.add(panel);
        frame.setVisible(true); // Kommt am Ende - dann ist auch kein validate notwendig.
    }

    public static void main(String[] args) {
        new Gui();
    }
}

Dabei auch bitte die Kommentare beachten.
 
H

HackerBanane

Mitglied
Die Bilder wurden zwar gefunden, allerdings zeichnet das Programm diese immer noch nicht...
 
kneitzel

kneitzel

Top Contributor
Ja, ich hatte einfach nur den Code von Dir genommen und ohne Tests ein kleines Refactoring gemacht, damit Du siehst, wie es mit den Variablen aussehen könnte...

Das Problem ist, dass Du ein Panel zu dem JFrame hinzu fügst ohne dem JPanel eine Größe zu geben... Damit hat das Panel die Größe 0 und dementsprechend siehst Du von dem Inhalt nichts.

Also entweder das Panel weglassen und das Label direkt zum JFrame hinzu fügen oder dem Panel eine Größe zuweisen.
 
mihe7

mihe7

Top Contributor
Den kenne ich nicht.
Den? Pong ist ein "Videospiel" aus den 70ern :) Auf Youtube gibt es dafür ein "Tutorial" aus einer Reihe, in der vor allem eines gezeigt: wie man es nicht machen sollte. Deine Klassennamen und der Aufbau weisen stark auf eines dieser Videos hin.

Wenn Du objekt-orientiert programmieren willst, gibt es eine goldene Regel für das Schlüsselwort static: das taucht im Quelltext nur bei der main-Methode oder im Zusammenhang mit der Definition von Konstanten auf.
 
kneitzel

kneitzel

Top Contributor
Aber zu dem Pong Tutorial muss man sagen, dass die Anfänger davon total begeistert sind ... so habe ich zumindest die Kommentare in Erinnerung :)

Aber ich will nichts sagen - ich habe einen Einblick bekommen in den Umfang von so Videos ...
 
H

HackerBanane

Mitglied
Achso!!
Ich dachte du meinst einen YouTuber, der Pong heißt😂
Ich kenne das Spiel Pong natürlich!;)
 
H

HackerBanane

Mitglied
Eine Frage hätte ich da noch:
Jetzt habe ich einen JButton mit einem Hintergrund und veränderter Schrift erstellt, was auch prima klappt:

JButton button = new JButton("Einstellungen");
button.setBounds(425, 450, 800, 80);
Font font = new Font("Stencil", Font.PLAIN, 80);
button.setFont(font);
button.setForeground(Color.BLACK);
button.setBorderPainted(false);
button.setVisible(true);
button.setOpaque(false);
button.setContentAreaFilled(false);
JLabel label = new JLabel();
label.setSize(500, 80);
label.setIcon(new ImageIcon((getClass().getResource("ButtonBackground.png"))));
Var.options.add(label);
Var.frame.add(Var.button);

Wie kriege ich jetzt die Schrift auf dem JButton wieder in den Vordergrund?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fadi Images in JAR Datei laden? AWT, Swing, JavaFX & SWT 5
S aktuelle möglichkeit images zu laden? AWT, Swing, JavaFX & SWT 2
A Wie kann ich Images schneller laden? AWT, Swing, JavaFX & SWT 18
T JavaFX Label mit mehreren Images AWT, Swing, JavaFX & SWT 11
J Images drehen AWT, Swing, JavaFX & SWT 5
F Kollision zweier Images AWT, Swing, JavaFX & SWT 3
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
B 2D-Grafik Shade eines Images AWT, Swing, JavaFX & SWT 1
D Applet Auslesen von Images aus Ressourcen AWT, Swing, JavaFX & SWT 29
B 2D-Grafik Dynamisches Erstellen von Images und deren Animation AWT, Swing, JavaFX & SWT 4
S Images färben und transparenz ändern AWT, Swing, JavaFX & SWT 4
I Größe eines rotierten Images AWT, Swing, JavaFX & SWT 3
C SWT probleme beim einbinden von Images AWT, Swing, JavaFX & SWT 2
M SWT Images bei Toggle Button wechseln AWT, Swing, JavaFX & SWT 3
reibi SWT Teilbereich eines Images markieren AWT, Swing, JavaFX & SWT 7
Developer_X Uneditable JTable mit Images AWT, Swing, JavaFX & SWT 2
G AWT Images aus Imagearray an die Maus pappen und bewegen AWT, Swing, JavaFX & SWT 4
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
Luk10 AWT Casten von images AWT, Swing, JavaFX & SWT 11
S SWT Images zu Byte Arrays AWT, Swing, JavaFX & SWT 5
G Images in GUI anzeigen lassen AWT, Swing, JavaFX & SWT 2
T 2 Images (jpg) zu einem zusammenfügen - nebeneinander AWT, Swing, JavaFX & SWT 3
S java.net.MalformedURLException: no protocol:/images/Home.jpg AWT, Swing, JavaFX & SWT 14
S [SWT] Toogle Button 2 verschiedenen images? AWT, Swing, JavaFX & SWT 6
T Aus farbigen images (JPG) graustufen images erstellen AWT, Swing, JavaFX & SWT 8
R Images anpassen AWT, Swing, JavaFX & SWT 4
H 2 Images positionieren AWT, Swing, JavaFX & SWT 9
orenishii mehrseitig Images anzeigen und drucken SimpleBook.java AWT, Swing, JavaFX & SWT 5
S Images in JAR AWT, Swing, JavaFX & SWT 6
I SWT - Images wiederbenutzen AWT, Swing, JavaFX & SWT 3
V Bilder -> SWT Images in einer Datei serialisieren und des AWT, Swing, JavaFX & SWT 9
G Warum gehen meine Icons/Images nicht weg? AWT, Swing, JavaFX & SWT 2
M Images werden nicht scharf AWT, Swing, JavaFX & SWT 3
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
C Swing F5 Taste neu laden auf ganzen Frame AWT, Swing, JavaFX & SWT 9
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
F JButtons neu laden AWT, Swing, JavaFX & SWT 4
M AWT Laden von Sprites AWT, Swing, JavaFX & SWT 3
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
@SupressWarnings() JavaFX Bilder in executable jar laden AWT, Swing, JavaFX & SWT 5
S JavaFX Laden des Inhalts AWT, Swing, JavaFX & SWT 1
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
I Scene Builder kann .fxml nicht mehr laden AWT, Swing, JavaFX & SWT 3
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
X Java Fxml laden AWT, Swing, JavaFX & SWT 4
G Properties automatisch laden AWT, Swing, JavaFX & SWT 10
D JavaFX Gesetzte Variable in einem Controller im Controller laden AWT, Swing, JavaFX & SWT 1
L Graphik nach 100 ms neu laden AWT, Swing, JavaFX & SWT 1
Z JAVAFX Stage über Controller weitergeben um css-file zu laden AWT, Swing, JavaFX & SWT 4
S JavaFX Fenstergrösse automatisch Speichern und Laden AWT, Swing, JavaFX & SWT 4
M Datenbanksätze in ToolTip laden AWT, Swing, JavaFX & SWT 4
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
I Zufallsbilder laden AWT, Swing, JavaFX & SWT 2
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
X JFrame erst nach dem Laden sichtbar stellen AWT, Swing, JavaFX & SWT 8
N FXML Dokument laden AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
B Ressourcen laden beim Ausführen der .jar nicht schnell genug AWT, Swing, JavaFX & SWT 2
V JavaFX - fxml-Datei laden (neben CSS) AWT, Swing, JavaFX & SWT 2
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
K JLabel nachträglich laden AWT, Swing, JavaFX & SWT 6
T Modell als XML Speichern / Laden AWT, Swing, JavaFX & SWT 9
B Hintergrund laden AWT, Swing, JavaFX & SWT 3
V Laden einer Bitmap / Eclipse-Problem? AWT, Swing, JavaFX & SWT 4
S Font laden, Wort zeichnen und animieren..? AWT, Swing, JavaFX & SWT 2
G Objekte in und aus einer JTable laden AWT, Swing, JavaFX & SWT 5
H 2D-Grafik Bilder laden ist nicht zuverlässig AWT, Swing, JavaFX & SWT 3
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
Luk10 Fragen zum Laden von Fonts AWT, Swing, JavaFX & SWT 4
B Swing Laden von serialisierten Objekten (invalid type code AC)) AWT, Swing, JavaFX & SWT 3
N Swing BufferedImage neu laden AWT, Swing, JavaFX & SWT 10
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
T Swing Laden eines Icons auf JButton liefert NullPointerException AWT, Swing, JavaFX & SWT 8
C 2D-Grafik bild aus resource folder laden AWT, Swing, JavaFX & SWT 3
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
Luk10 Laden von eingebundenen .png Datein AWT, Swing, JavaFX & SWT 15
S Objekt einmal laden zweimal anzeigen 3d AWT, Swing, JavaFX & SWT 6
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
P Text-Vorschläge für JTextField aus ner Liste laden AWT, Swing, JavaFX & SWT 8
J Bild aus Datei in BufferedImage laden AWT, Swing, JavaFX & SWT 4
S GUI per XML zur Laufzeit laden AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Fehler beim Laden eines Bildes AWT, Swing, JavaFX & SWT 25
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
B Problem beim laden von Bild mit getResource() AWT, Swing, JavaFX & SWT 3
L Swing Bilder über andere Bilder laden AWT, Swing, JavaFX & SWT 3
M Bild aus .jar Archiv laden geht nicht AWT, Swing, JavaFX & SWT 6
H Swing HTML in einem JEditorPane zeilenweise hinzufügen ohne Inhalt jedes Mal neu zu laden AWT, Swing, JavaFX & SWT 4
D Swing JTable in Datei speichern und laden AWT, Swing, JavaFX & SWT 3
E Laden von Bilddateien erzeugt OutOfMemory Error AWT, Swing, JavaFX & SWT 6
F Swing Zur Laufzeit Bild laden und auf JPanel anzeigen AWT, Swing, JavaFX & SWT 4
H Applet - Hilfedateien im Browser öffnen / eine Webseite laden AWT, Swing, JavaFX & SWT 6
B ImageIO gif Dateien laden AWT, Swing, JavaFX & SWT 7
S Ordner mit Bildern laden AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Anzeige


Oben