Image Loader lädt nicht alle Bilder:

Butzibu

Neues Mitglied
Moin ich habe folgendes Problem..
Ich habe meinen Image Loader so geschrieben:

Java:
import java.awt.*;
import java.io.*;

import javax.imageio.ImageIO;

public class imageLoader {

    static Image img1, img2, img3, img4;

    public imageLoader() {
        try {

            img1 = ImageIO.read(new File("src/sA.png"));
            img2 = ImageIO.read(new File("src/gA.png"));
            img3 = ImageIO.read(new File("src/tO.png"));

        } catch (IOException e) {
            e.printStackTrace();

        }

    }
}

Gezeichnet werden die Bilder folgend:

Java:
        g.drawImage(imageLoader.img1, 250, 600, 600, 350, null);
        g.drawImage(imageLoader.img2, 1050, 600, 600, 350, null);
        g.drawImage(imageLoader.img3, 250, 100, 600, 350, null);

Nun das Problem: img3 wird nicht geladen, bzw liegt es nicht direkt an dem Bild sondern scheinbar am Code.

Wenn ich die einzelnen Variablen im ImageLoader abändere, funktioniert das Laden der Bilder, jedoch wieder nur von 2.

Was habe ich am Code falsch geschrieben? Soll ich mehr Code senden?
 
ich dachte ich hätte es gelöst, es wurde angezeigt, nachdem ich das Programm erneut gestartet habe, wurde es wieder nicht mehr angezeigt..mit einem repaint(); klappt es, aber meine SSD macht dann komische geräusche
 
Zuletzt bearbeitet:
Ein repaint am Ende wird wohl die Lösung sein.

Wie deine SolidStateDisk dabei Geräusche macht, kann ich nicht aus der Ferne beurteilen.
 
Du gibst uns zu kleine Ausschnitte. Der Code, der da etwas malt sieht aus, als wäre das typische Code in einer paint() oder paintComponent() Methode eines Controls. In dieser methode ist der Aufruf von redraw() eigentlich NIE die Lösung. Die Geräusche dürften auch nicht von der SSD kommen (die hat keine mechanischen Bauteile) sondern eher von anderen beweglichen Bauteilen wie einem Lüfter, der angesteuert wird, weil da ein Programm ggf. 100% Last verursacht - aber das ist alles nur geraten, da die Informationen nicht ausreichen.

Generell sieht es so aus, dass die Bilder sogenannte Ressourcen sind. Diese sollte man nicht mittels relativem Pfad und direktem Filezugriff laden sondern über den Classloader laden: https://mkyong.com/java/java-read-a-file-from-resources-folder/
(Hinweis: Du hast vermutlich ein Eclipse Projekt, bei dem alles direkt in src liegt. Da ist der src Order auch der resource Ordner. Du hast also nur nicht die unterschiedlichen Verzeichnisse wie Du in den Bildern siehst. Da ist es aufgeteilt in src/main/java und src/main/resources.)
 
Ein repaint am Ende wird wohl die Lösung sein.

Wie deine SolidStateDisk dabei Geräusche macht, kann ich nicht aus der Ferne beurteilen.
Am besten noch angeben, am Ende wovon 🙂 Hier hat schon mal jemand ein repaint in einer paint-Methode gepostet.


Was am Code Unsinn ist: Warum sind die Variablen static, wenn sie bei der Instanzierung der Klasse geladen werden?
Ich kann mir vorstellen, dass sich verschiedene Instanzen in die Quere kommen können. Oder aber es wird darauf zugegriffen, bevor die Instanz erzeugt wird.

Also: ENTWEDER static Variablen ODER erst zum Zeitpunkt der Instanzierung laden.

Wenn sie statisch sein sollen, dann verschiebe das Laden in den static{} Block, sie werden dann geladen, sobald der erste externe Zugriff erfolgt.
 

Neue Themen


Zurück
Oben