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