Java swing动画的正确并发方法?

Java swing动画的正确并发方法?,java,multithreading,swing,animation,concurrency,Java,Multithreading,Swing,Animation,Concurrency,我将要编写一个动画,其中当用户按下(并按住)相应的键时,JPanel上的角色向左/向右移动 现在,由于我对并发性还不熟悉,我想问:处理动画的代码(即只要按住键就会移动和重新绘制角色的方法)应该在工作线程还是事件调度线程上执行 我在swing中阅读了关于并发性的教程,似乎更改组件的东西(在本例中是绘制JPanel)应该在事件处理线程上,但另一方面,只要按住一个键,就会冻结所有其他事件 例如,如果我理解正确的话,用户在按住向左键时将无法暂停游戏。那么,哪种方法是正确的,为什么?或者可能有完全不同的方

我将要编写一个动画,其中当用户按下(并按住)相应的键时,
JPanel
上的角色向左/向右移动

现在,由于我对并发性还不熟悉,我想问:处理动画的代码(即只要按住键就会移动和重新绘制角色的方法)应该在工作线程还是事件调度线程上执行

我在
swing
中阅读了关于并发性的教程,似乎更改组件的东西(在本例中是绘制
JPanel
)应该在事件处理线程上,但另一方面,只要按住一个键,就会冻结所有其他事件

例如,如果我理解正确的话,用户在按住向左键时将无法暂停游戏。那么,哪种方法是正确的,为什么?或者可能有完全不同的方式制作这样的动画


提前谢谢你

所有的绘画都需要在EDT螺纹上完成。不要在任何其他线程上。使用 SwingUtilities.invokeLater()。。谢谢你的画。您可以进行计算,例如角色在工作线程上的下一个位置。如果您在EDT上创建和使用Swing类,您将不会有任何不响应。只要确保你的计算不会太长。对于动画,只要找到角色的下一个位置,就可以调用
swingutilites.invokeLater更新UI上的更改

所有绘图都需要在EDT线程上完成。不要在任何其他线程上。使用 SwingUtilities.invokeLater()。。谢谢你的画。您可以进行计算,例如角色在工作线程上的下一个位置。如果您在EDT上创建和使用Swing类,您将不会有任何不响应。只要确保你的计算不会太长。对于动画,只要找到角色的下一个位置,就可以调用
swingutilites.invokeLater更新UI上的更改

如果要隐式绘制,简单的线程方法会有所帮助,因为底层线程和线程之间没有任何冲突,就像要隐式绘制一样,简单的线程方法会有所帮助,因为底层线程和您的线程之间并没有任何冲突,所以非常感谢您的澄清。还有一件事要确定:所谓“我的计算”,你的意思是只计算字符在下一帧中的位置的代码,对吗?那么,谢谢你澄清了这一点。还有一件事要确定:所谓“我的计算”,你的意思是只计算字符在下一帧中的位置的代码,对吗?