Java (swing) gif teilweise transparent, wenn es nicht sein soll

Ich versuche, ein animiertes GIF in einer Java-Anwendung anzuzeigen. Bisher wird es angezeigt und animiert, aber wo es entweder ganz schwarz oder ganz weiß sein soll, scheint es transparent zu werden, und ich kann die Farbe des darunter gezeichneten Rechtecks erkennen. Hier ist zum Beispiel eines der Gifs, die ich verwende:

Auf einem schwarzen Hintergrund fällt es nicht auf, aber wenn ich es in Cyan ändere:

Was wirklich seltsam ist, ist, dass es so aussieht, als würde es für das erste Bild richtig angezeigt und dann erst danach durcheinander gebracht. Dies ist die Methode, die ich verwende, um das Bild zu erhalten und zu zeichnen:

//Draw title
img = new ImageIcon(Display.class.getResource(titlePath)).getImage();
g.drawImage(img, 404, 430, this);

Ich überschreibe die Paint-Komponente in einer Klasse, die JPanel erweitert, und rufe nur einmal den Befehl repaint für diese Klasse auf.

Was könnte das verursachen, ist es ein bekanntes Problem oder mache ich einen Fehler in der Art und Weise, wie ich das Bild zeichne? Ich konnte keine Dokumentation zu diesem Problem finden.

Danke im Voraus

Hier sind zwei deroriginal gif files.

EDIT: Hier ist ein Beispiel des Codes, den ich geschrieben habe. Ich habe unnötigen Code entfernt, um ihn kurz zu halten, aber alles, was mit dem Problem zusammenhängt, beibehalten. Es kann auch erwähnenswert sein, dass es kein Problem gibt, wenn ich eine PNG-Datei (eines der Frames, die zum Erstellen des GIF verwendet werden) mit derselben Methode zeichne. Das GIF wurde am @ gemachttp: //gifmaker.me falls es relevant ist.

public class Display extends JPanel implements Constants{
    private GameData GD;
    private String currentImagePath;

    public Display(GameData gd){
        GD = gd;
        this.setPreferredSize(screenDimension);

        this.repaint();
    }

    public void draw(Location loc){
        currentImagePath = loc.getCurrentImagePath();

        this.repaint();
    }

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(CYAN);
        g.fillRect(0, 0, screenW, screenH);

        Image img;

        if(OtherWorlds.isOnTitle == true){ //Title screen
            //Draw image
            img = new ImageIcon(Display.class.getResource(currentImagePath)).getImage();
            g.drawImage(img, 10, 10, this);

            //Draw other stuff

        {
        else{ //Regular location

            //Draw image
            img = new ImageIcon(Display.class.getResource(currentImagePath)).getImage();
            g.drawImage(img, 10, 10, this);

            //Other images and stuff in different areas
            //Drawn using the exact same method as above

            }

            //Random other lines and stuff
        }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage