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
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;
}
}