Bild zu zeichnen (drawImage) klappt nur manchmal??

Status
Nicht offen für weitere Antworten.

Novanic

Bekanntes Mitglied
Hi Leute,

ich habe ein merkwürdiges Problem. Auf diesem JPanel sollen Bilder gezeichnet werden. Das klappt auch, aber leider nicht bei jedem Starten des Programms.

Die Komponente wird aber richtig in meine GUI geadded (das kann ich an der Hintergrundfarbe sehen), aber das Startbild dass auf dem JPanel gezeichnet werden soll, ist nicht immer zu sehen. Auch das erzwingen des Repaints nützt in dem Fall nichts (Fenstergröße ändern, play() ausführen, ...).

Ich kann z.B. 5 mal das Programm über die IDE starten und alles läuft so wie gewünscht. Beim 6. Start wird plötzlich kein Image mehr angezeigt, dann starte ich es wieder und dann gehts wieder...
(Zwischen den Starts habe ich nichts am Code geändert und zwischen den Starts beende ich das Programm jedesmal wieder und an der IDE und fehlenden Image-Dateien kann es auch nicht liegen).

Hat jemand eine Idee wodran dieser Mythos liegen kann?

Danke schonmal im Voraus! :)

Gruß Nova


Code:
package game.real.engine.animation;

import game.real.engine.animation.render.Render;

import javax.swing.*;
import java.awt.*;

public class AnimationRender extends JPanel implements Render
{
    private static final boolean DIRECTION_FORWARD = true;
    private static final boolean DIRECTION_BACKWARD = false;

    private Animation myAnimation;
    private int myCurrent;
    private int myPauseTime;
    private Thread myRunner;
    private boolean myDirection;

    public AnimationRender()
    {
        myCurrent = 0;
        myPauseTime = 35;
    }

    public void play()
    {
        play(DIRECTION_FORWARD);
    }

    public void playback()
    {
        play(DIRECTION_BACKWARD);
    }

    private void play(boolean aDirection)
    {
        if(myDirection != aDirection)
        {
            myDirection = aDirection;
            stop();
        }

        if(myRunner == null)
        {
            myRunner = new Thread(this);
            myRunner.start();
        }
    }

    public void stop()
    {
        if(myRunner != null)
        {
            myRunner = null;
        }
    }

    public void paint(Graphics aScreen)
    {
        super.paint(aScreen);
        Graphics2D theScreen = (Graphics2D)aScreen;
        if(myAnimation != null) {
            Image[] theImages = myAnimation.getImages();
            theScreen.drawImage(theImages[myCurrent], 0, 0, this);
        }
    }
    
    public void run()
    {
        if(myAnimation != null) {
            Thread theCurrentThread = Thread.currentThread();
            if(myDirection)
            {
                while(myRunner == theCurrentThread)
                {
                    myCurrent++;
                    int theImageCount = myAnimation.size();
                    if(myCurrent >= theImageCount)
                    {
                        myCurrent = myCurrent - 1;
                        stop();
                    }
                    repaint();
                    try {
                        Thread.sleep(myPauseTime);
                    } catch(InterruptedException e) { /*do nothing*/ }
                }
            } else {
                while(myRunner == theCurrentThread)
                {
                    myCurrent--;
                    if(myCurrent < 0)
                    {
                        myCurrent = myCurrent + 1;
                        stop();
                    }
                    repaint();
                    try {
                        Thread.sleep(myPauseTime);
                    } catch(InterruptedException e) { /*do nothing*/ }
                }
            }
        }
    }

    public Animation getAnimation()
    {
        return myAnimation;
    }

    public void setAnimation(Animation aAnimation)
    {
        myAnimation = aAnimation;
    }
}
 
S

SlaterB

Gast
das Laden eines Images ist nicht ganz trivial,
das kann schon mal ne Weile dauern,

vielleicht wartet dein Programm nicht, bis das Bild fertig geladen ist,
poste den Code für das Laden der Bilder

und du bist dir sicher, dass myAnimation nicht null ist?
kann man mit einem einfachen System.out.println() prüfen..
 

Novanic

Bekanntes Mitglied
Hi,

also myAnimations ist nicht NULL, das hatte ich schon mit einem System.out geprüft.
Die Images werden vorher geladen, die müssten doch gecached sein oder?

Die Images werden geladen und in einem Animation-Objekt gehalten. Das Animation-Objekt wird dann an den AnimationRender ^^ übergeben.

Code:
File[] theVariationImages = aVariation.listFiles(theFileFilter);

Image[] theImages = new Image[theVariationImages.length];

for(int i = 0; i < theVariationImages.length; i++)
{
   try {
      Image theImage = ImageLoader.getInstance().loadImage(theVariationImages[i].getAbsolutePath());
      theImages[i] = theImage;
   } catch (IOException e) {
      throw new LoadingException();
   }
}
return new AnimationSkeleton(theImages);

Gruß Nova
 
S

SlaterB

Gast
die Klasse ImageLoader ist mir gänzlich unbekannt,
ist das etwa eine eigene Klasse von dir?

dann hast du die wahre Bedeutung des Satzes
> poste den Code für das Laden der Bilder
nicht erfasst ;)
 

Novanic

Bekanntes Mitglied
Hi,

die Klasse ImageLoader ist nicht von mir. Die ist im Standard-JDK und im Package "com.sun.deploy.ui". Auf die Klasse bin ich eher durch zufall gestoßen und die hatte auch funktioniert... :)

Was ist denn üblich um Bilder in Image-Objekte zu laden? Am Besten so dass sie gecached sind.

Gruß Nova
 

Novanic

Bekanntes Mitglied
Okay hab ich jetzt mal so umgebaut, das Problem besteht aber leider trotzdem noch. :-(

Bei jedem x-ten Start wird kein Image angezeigt... :-(

Gruß Nova
 
S

SlaterB

Gast
du könntest immer noch mal deinen Code posten und so vielleicht doch einen Fehler entdecken lassen,
aber ich fische natürlich nur im Trüben, genaue Tipps habe ich persönlich nicht,

günstig, wäre dein Programm insgesamt auf 30 Zeilen zu kürzen,
nur das eine Image in der JFrame-Klasse laden und anzeigen,
alles andere raus,

wenn das immer noch manchmal nicht geht, dann kann man das besser auf anderen Rechnern ausprobieren,

wenn es dann immer klappt:
Schritt für Schritt alles rausgeschmissene wieder einbauen und testen testen testen ;(
 

Novanic

Bekanntes Mitglied
Ah, jetzt hab ichs gefunden.

Ich hatte mich schon gewundert, warum das Problem erst nach dem Einschecken in SVN auftrat. Mein FlieFilter zum Laden der Images hatte nicht ganz richtig funktioniert und dadurch Versucht den SVN-Ordner zu laden, was ein leeres Image-Array zur Folge hatte.
Da die Animationen in einen Container gepackt werden und eine Animation per Zufall gelesen wird, konnte es vorkommen, dass das leere Image-Array erwischt wird.

Man sowas dusseliges, dass mit dem Zufallsprinzip hatte ich garnicht mehr auf dem Zettel. *g* :)

Danke für die Hilfe! :)

Gruß Nova
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
aze Nicht rechteckiges Bild zeichnen Spiele- und Multimedia-Programmierung 5
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
S Bild in Speicherbild zeichnen = Nichts? Spiele- und Multimedia-Programmierung 3
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S Wie kann ich ein Bild in einen Frame einfügen? Spiele- und Multimedia-Programmierung 2
U DPI von einem Bild definieren Spiele- und Multimedia-Programmierung 5
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
Silvascus Bild --> JFrame Hintergrund Spiele- und Multimedia-Programmierung 3
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
windl EXIFF Header in ein Bild schreiben Spiele- und Multimedia-Programmierung 0
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
B Bild ohne Image auf die Festplatte streamen Spiele- und Multimedia-Programmierung 4
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
K Bild von USB-Webcam über JMF Spiele- und Multimedia-Programmierung 2
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
P Bild Pixelweise auslesen Spiele- und Multimedia-Programmierung 13
K Bild berührt Bild Spiele- und Multimedia-Programmierung 29
A Bild einer Webcam auffangen Spiele- und Multimedia-Programmierung 20
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
lumo LWJGL - Bild rendern Spiele- und Multimedia-Programmierung 16
A .jpg-Bild auf andere Position verschieben Spiele- und Multimedia-Programmierung 4
F Bild im sourcecode Spiele- und Multimedia-Programmierung 32
F Bild einfärben Spiele- und Multimedia-Programmierung 5
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Q Rechteck in BIld suchen Spiele- und Multimedia-Programmierung 8
M Bild kopieren Spiele- und Multimedia-Programmierung 2
S Bild capturen mit direcShow Spiele- und Multimedia-Programmierung 2
B Character Bild links/rechts Spiele- und Multimedia-Programmierung 19
Developer_X Bild Größe einstellen Spiele- und Multimedia-Programmierung 2
ARadauer bild in bild suchen Spiele- und Multimedia-Programmierung 6
M 2D - Bild um y-Achse drehen Spiele- und Multimedia-Programmierung 9
S Bild spiegeln Spiele- und Multimedia-Programmierung 7
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
G Palette aus Bild extrahieren Spiele- und Multimedia-Programmierung 5
A Wasserzeichen auf Bild Spiele- und Multimedia-Programmierung 2
G Paintsurface ins Bild konvertieren Spiele- und Multimedia-Programmierung 8
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
F Bild generieren Spiele- und Multimedia-Programmierung 3
J Animation hinter transparentem Bild auf der GlassPane Spiele- und Multimedia-Programmierung 6
A Kein Bild Spiele- und Multimedia-Programmierung 3
T Bild als mehrdimesionaler Array Spiele- und Multimedia-Programmierung 4
H Bild von Webcam laden Spiele- und Multimedia-Programmierung 4
P Bild, Pixel- / Bereichsfarbe auslesen Spiele- und Multimedia-Programmierung 12
G start Bild einfrügen in ein Java Spiel Spiele- und Multimedia-Programmierung 7
Quaxli off-topic: HDR-Bild errechnen Spiele- und Multimedia-Programmierung 3
G Auf Tastendruck bild verschieben Spiele- und Multimedia-Programmierung 5
O ich hab da ein problem mit nem bild Spiele- und Multimedia-Programmierung 8
C JPEG oder BMP Bild erstellen Spiele- und Multimedia-Programmierung 5
A Bild im Raum darstellen (Texture2D) Spiele- und Multimedia-Programmierung 4
V Wie berechnet man das Bild eines Schwarzen Loches in Java? Spiele- und Multimedia-Programmierung 10
K Einzelne Pixel in einem Bild lesen Spiele- und Multimedia-Programmierung 5
P repaint verschiebt das Bild Spiele- und Multimedia-Programmierung 2
S BMP-Bild Pixel für Pixel bearbeiten Spiele- und Multimedia-Programmierung 1
P 2D Bild drehen Spiele- und Multimedia-Programmierung 4
M durchsichtiges Bild nach clearRect Spiele- und Multimedia-Programmierung 8
M RGB-Bild in Graustufen-Bild umwandeln Spiele- und Multimedia-Programmierung 2
M Bild-Spiegelung mit Java! Spiele- und Multimedia-Programmierung 5
S Bild auf Bild = Nichts? Spiele- und Multimedia-Programmierung 3
N Bild im Panel ändern Spiele- und Multimedia-Programmierung 3
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
R Bild drehen Spiele- und Multimedia-Programmierung 24
J Bild generieren Spiele- und Multimedia-Programmierung 5
X Bild auf aktueller position drehen Spiele- und Multimedia-Programmierung 2
K Java2d Bild als JPG oder so speichern Spiele- und Multimedia-Programmierung 10
E relevanter bereich einer isometrischen karte zeichnen (AffineTransform) Spiele- und Multimedia-Programmierung 0
SaftigMelo Kreissegment zeichnen Spiele- und Multimedia-Programmierung 2
E Buttons neu zeichnen im GridLayout Spiele- und Multimedia-Programmierung 2
A Zeichnen außerhalb der paint-Methode Spiele- und Multimedia-Programmierung 6
E Isometrische Tiles mit unterschiedlicher Größe an korrekter Position zeichnen Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
J Int Wert auf JFrame zeichnen Spiele- und Multimedia-Programmierung 3
H [ANIMATION] Hintergrundbild nur einmal zeichnen Spiele- und Multimedia-Programmierung 3
M Methoden eine Map zu zeichnen Spiele- und Multimedia-Programmierung 5
F nur Ausschnitt eines Image zeichnen Spiele- und Multimedia-Programmierung 9
T 3D Graphen Zeichnen Spiele- und Multimedia-Programmierung 19
F Kurven zeichnen Spiele- und Multimedia-Programmierung 2
E Keine Werte zum Zeichnen werden Übergeben Spiele- und Multimedia-Programmierung 3
A Halbkreise zeichnen lassen? Spiele- und Multimedia-Programmierung 2
F Lineal mit Zahlen zeichnen Spiele- und Multimedia-Programmierung 7
N Linie mit Rand zeichnen Spiele- und Multimedia-Programmierung 10
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
A Optimiertes Zeichnen - wie? Spiele- und Multimedia-Programmierung 8
data89 Koordinaten in Koordinatensystem zeichnen Spiele- und Multimedia-Programmierung 11
M Binärbaum ohne Überlappung zeichnen Spiele- und Multimedia-Programmierung 3
H Decke zeichnen mit Hilfe eines Polygons Spiele- und Multimedia-Programmierung 2
B 1)JButtons zeichnen 2)Kolisionsabfrage von zwei Objekten Spiele- und Multimedia-Programmierung 9
G Linie im Applet zeichnen Spiele- und Multimedia-Programmierung 5
G Schüsse zeichnen, Fehler? Spiele- und Multimedia-Programmierung 3
S Dreieck zeichnen Spiele- und Multimedia-Programmierung 9
G Überlagern von Strings beim zeichnen verhindern Spiele- und Multimedia-Programmierung 3
C Objekt bei Buttonklick zeichnen Spiele- und Multimedia-Programmierung 16
G Geschwungene Klammer zeichnen Spiele- und Multimedia-Programmierung 5
F Neu zeichnen verhindern Spiele- und Multimedia-Programmierung 25
J Zeichnen in BufferedImage und dieses in Datei speichern Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben