【问题标题】:Multi threading with Swing: Thread that updates & repaints?Swing 多线程:更新和重绘的线程?
【发布时间】:2017-03-06 11:21:28
【问题描述】:

我需要每 X 毫秒更新和重绘我的应用程序,这意味着我需要创建一个线程来调用 frame.update() 这是一个自定义方法,以及 JFrameframe.repaint(),但我担心如果这样会导致任何死锁或其他多线程问题,因为据我记得Swing 有自己的线程来更新组件等,所以在这种情况下,我有点无能,我正在尝试在做一些可能带来的事情之前进行一些研究我未来的问题。

让我认为它会引起问题的是因为我使用SwingUtilities.invokeLaternew runnable

或者有没有使用SwingUtilities 的原始方法?

是否可以创建一个每 X 毫秒重绘帧的线程?

【问题讨论】:

  • 不要运行线程,使用计时器:docs.oracle.com/javase/tutorial/uiswing/misc/timer.html(尽管来自线程的invokeLater 工作正常)
  • @zapl 但是计时器和使用线程不一样吗?它确实创建了一个新线程
  • 不是真的,“请注意,Swing 计时器的任务是在事件调度线程中执行的。” - 它安排你的代码在现有的 ui 线程中运行
  • 我们在这里谈论的 X 有多大?
  • 我认为大约 60 毫秒

标签: java multithreading swing


【解决方案1】:

使用 Swing Timer,您不必关心从哪个线程开始调用 UI 更新。

How to Use Swing Timers

timer = new Timer(speed, this); 
timer.setInitialDelay(pause); 
timer.start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多