Hi, ich hoffe ihr könnt mir helfen.
Ich habe einen TimerTask, der ein Panel aus einer Map hohlt, es einem anderen Panel hinzufügt, und einen Thread startet, der ein Panel, was sich zu dem Zeitpunkt über dem hinzugefügten Panel befindet nach links verschiebt, bis es nichtmehr sichtbar ist und es danach entfernt.
Nun habe ich aber das Problem, dass die remove(Component) sehr lange in der Methode Thread.holdsLock(Object) dem momentanen Thread blockiert, und ich keine Ahnung habe woran das liegen könnte. Auch Google hat nichts ausgespuckt. Weiß jemand zufällig, woran das liegen könnte? Auf die 3 Panels wird sonst an keiner Stelle zugegriffen.
Ich habe einen TimerTask, der ein Panel aus einer Map hohlt, es einem anderen Panel hinzufügt, und einen Thread startet, der ein Panel, was sich zu dem Zeitpunkt über dem hinzugefügten Panel befindet nach links verschiebt, bis es nichtmehr sichtbar ist und es danach entfernt.
Nun habe ich aber das Problem, dass die remove(Component) sehr lange in der Methode Thread.holdsLock(Object) dem momentanen Thread blockiert, und ich keine Ahnung habe woran das liegen könnte. Auch Google hat nichts ausgespuckt. Weiß jemand zufällig, woran das liegen könnte? Auf die 3 Panels wird sonst an keiner Stelle zugegriffen.
Java:
public void enterNextRoom(int x, int y, int floor, final Room newRoom)
{
stopRoom();
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
RoomPanel.getInstance().add(newRoom);
}
});
new Thread("Fade Room") {
public void run()
{
double speed = 0.0d;
double x = getX();
do
{
speed+= 4.0d;
x-= speed;
final int finalVar = (int) x;
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
setLocation(finalVar, getY());
}
});
try
{
TimeUnit.MILLISECONDS.sleep(40L);
}
catch (InterruptedException e) {}
}
while(x > -640);
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
RoomPanel.getInstance().remove(Room.this);
}
});
newRoom.focusPlayer();
}
}.start();
}