Как я уже обсуждал с Inerdia в более раннем посте ,
, что-то все еще странно. Когда я нахожусь в каком-то JPanel (EDT точно - я проверил с помощью метода check), а затем я вызываю некоторыепоток анимации (поток расширяет поток), чтобы начать, внутри потока я не на EDT проверкой.
Так что я думаю, что так и должно быть, потому что анимация должна быть на EDT, поэтому я поместил метод animate в runnable и invokeAndWait (), но все же понял, что в потоке анимации я не на EDT, а вызов этого кода, как я уже говорил ранее, на EDT, поэтому мой invokeLater, похоже, не помещает эту анимацию на EDT?это почему?
Соответствующий код (перед переносом метода animate в runnable и передачей для последующего вызова:
Итак, на JPanel есть строка:
Animate(trainRailRoadTrack);
Реализация:
void Animate(ArrayList<RailroadSquare> i_TrainRailRoadTrack) {
ArrayList<JPanelRailoadSquare> playerRailoadPanelsTrack = getRelevantRailroads(i_TrainRailRoadTrack);
new SuspendedAnimation(playerRailoadPanelsTrack).start();
jPanelBoard1.GetGameManager().EmptyPlayerSolution();
}
private class SuspendedAnimation extends Thread
{
private ArrayList<JPanelRailoadSquare> m_PlayerRailoadPanelsTrack;
public SuspendedAnimation(ArrayList<JPanelRailoadSquare> i_PlayerRailoadPanelTrack)
{
m_PlayerRailoadPanelsTrack = i_PlayerRailoadPanelTrack;
}
@Override
public void run()
{
m_IsAnimationNeeded = true;
for (JPanelRailoadSquare currRailoadSquare: m_PlayerRailoadPanelsTrack)
{
System.out.println("Is on Event dispatch thread: "+SwingUtilities.isEventDispatchThread());
currRailoadSquare.SetGoingTrain();
repaint();
try
{
Thread.sleep(150);
}
catch (InterruptedException e){}
currRailoadSquare.UnSetGoingTrain();
repaint();
}
}