当前位置: 首页 > 面试题库 >

动画线程和EDT

谯振国
2023-03-14
问题内容

正如我在较早的文章中与Inerdia讨论的那样,
当我在某些JPanel中(肯定是EDT-
我已通过方法check进行检查)时,仍然有些奇怪,然后我调用了一些动画线程(该线程扩展Thread)以在内部启动通过检查我不在EDT上的线程。
所以我想我应该是因为动画应该在EDT上,所以我用runnable和invokeAndWait()包装了animate方法,但是仍然在动画线程中得到了我不在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();                       
    }
}

问题答案:

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


 类似资料:
  • 问题内容: 我正在尝试使用一些简单的Android动画实现线程。我只是在使用sleep()时出错- 它说我需要一个方法。我知道可能有一个明显的解决方案。我的应用程序只是将一个在圆周上移动的球放置在一个随机的位置。我想要的是继续在随机位置放置形状。无论如何,有人可以告诉我我的线程在做什么错吗?谢谢。 }} 问题答案: 如果实现Thread或HandlerThread,请确保在等待辅​​助线程完成时U

  • 问题内容: 我想在我的WP博客中添加它。这样,每个新的div帖子的边框上都会有此动画。但是问题在于它在SVG中。无论如何,我可以在不使用SVG的情况下使此动画工作,并且我也不想使用javascript。 可以说代码是: 问题答案: CSS可以做到这一点,并且在使用多个背景并使用动画更改其位置时非常简单。 这是一个页面加载后边框连续不断移动的示例。 归功于web-tiki,它有助于修复最初在动画每个

  • 我正在使用JavaFX呈现一些SVG内容。我定义了许多方法,返回不同SVG形状(椭圆、圆、矩形、直线等)的路径。它们似乎都管用,除了线条法。JavaFX不会返回错误(意味着路径可能是正确的),但它也不会画出任何东西。这里是我的方法。 方法根据返回或,返回或。 下面是一个示例方法调用: 在我看来是有效的,但什么也没有画出来...

  • 编辑动画曲线 Unity 编辑器提供了几种不同的功能和窗口,用 曲线 来显示和编辑数据。这些用来查看和编辑的方法大体上相同,但是也有一些区别。 动画视图 使用曲线来显示和编辑 动画剪辑 中动画属性随时间变化的值。 动画视图 脚步组件可以含有 动画曲线 类型的成员变量,可以用于各种对象。在检视视图中点击这些变量将弹出 曲线编辑器。 曲线编辑器。 声源 组件使用曲线来控制声源的衰减量(随着距离变化)和

  • 使用动画曲线 属性列表 在一段 动画剪辑 中,任意动画属性都可以拥有 动画曲线,也就是说,动画剪辑控制着属性如何随时间变化。在 动画视图(左侧)的属性列表区域,罗列出了当前所有参与动画的属性。当动画视图处于关键帧清单模式,每个属性的值是一个条直线轨道,但是在曲线模式下,正在改变的属性值被可视化为曲线图形。无论你用哪种模式查看,曲线一直存在 — 关键桢清单模式只是简单的关键帧数据预览。 在 曲线模式

  • 本文向大家介绍Android编程中Tween动画和Frame动画实例分析,包括了Android编程中Tween动画和Frame动画实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程中Tween动画和Frame动画实现方法。分享给大家供大家参考,具体如下: Animation主要有两种动画模式:Tween动画和Frame动画 Tween动画由四种类型组成 alpha