0
正如我Inerdia在earlier post討論,
的東西仍然是奇怪,當我在一些JPanel的是(EDT肯定,我用的方法檢查中檢查),然後我把一些動畫線程(線程擴展線程)啓動,在線程內我不通過檢查EDT。
所以我想我應該是因爲動畫應該是美國東部時間,所以我包裹着的可運行和invokeAndWait()的動畫的方法,但還是得到了在動畫線程我不是EDT,同時呼籲該代碼爲我之前說過在美國東部時間,所以,我的invokeLater似乎不把這個動畫放在EDT上?這是爲什麼?動畫線程和EDT
相關的代碼(具有可運行包裹動畫的方法和通過稍後調用之前:
所以,正對一個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();
}
}