gpt4 book ai didi

java - 动画线程和 EDT

转载 作者:行者123 更新时间:2023-12-01 15:42:14 25 4
gpt4 key购买 nike

正如我在 earlier post 上与 Inerdia 讨论的那样,
事情仍然很奇怪当我在一些 JPanel 中(肯定是 EDT - 我用方法检查进行了检查)然后我调用一些动画线程(线程扩展线程)来启动时,在线程内部我没有通过检查进入 EDT .
所以我想我应该是因为动画应该在 EDT 上,所以我用 runnable 和 invokeAndWait() 包装了 animate 方法,但仍然在动画线程中得到了我不在 EDT 上的信息,同时调用了我之前所说的代码是在 EDT 上,所以,我的 invokeLater 似乎没有将该动画放在 EDT 上?这是为什么?

相关代码(在用 runnable 包装 animate 方法并传递给稍后调用之前:
因此,在 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();
}
}

最佳答案

SuspishedAnimation.run() 内,您不在 EDT 上。这就是您需要使用 invokeLater() 的地方,而不是在调用 Animate() 时:

@Override
public void run()
{
// We're outside the EDT in most of run()
m_IsAnimationNeeded = true;
for (JPanelRailoadSquare currRailoadSquare: m_PlayerRailoadPanelsTrack)
{
SwingUtilities.invokeAndWait(new Runnable() {
// The code that "talks" to Swing components has to be put on
// the EDT
currRailoadSquare.SetGoingTrain();
repaint();
});

// We want to keep sleeping outside the EDT.
try
{
Thread.sleep(150);
}
catch (InterruptedException e){}

SwingUtilities.invokeAndWait(new Runnable() {
currRailoadSquare.UnSetGoingTrain();
repaint();
}
}
}

关于java - 动画线程和 EDT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7867960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com