0

我想在按下按钮时显示标签的移动一段时间。请帮忙。只需告诉我在更改 setBounds 期间如何暂停进程一段时间,在这种情况下,sleep 方法会暂停进程,但仅执行最后一个 setBound 语句:

void ActionPerformed(..){
    Thread b = new Thread();

        try{
            label.setBounds(100,150,70,70);

            b.sleep(1000);
            label.setBounds(100,200,70,70);

            b.sleep(1000);
            label.setBounds(100,150,70,70);

        }catch(InterruptedException e){
            e.printStackTrace();
        }
}
4

1 回答 1

1

阅读摇摆并发教程。经验法则:

  • 您可能不会在事件调度线程中休眠,因为它会冻结 UI
  • 您不能在事件调度线程以外的线程中访问 swing 组件

因此,您需要一个单独的线程来休眠,然后要求 EDT 修改标签的边界。

使用摇摆定时器,或SwingUtilities.invokeLater()从后台线程调用,以便修改标签边界的任务由 EDT 完成。

另外,请注意这sleep()是一个静态方法。应该使用Thread.sleep()而不是调用它b.sleep()

于 2016-01-24T10:32:54.953 回答