java - 如何在 Swing 应用程序中使用延迟

标签 java swing multithreading

我正在构建一个 Swing 应用程序。在某些时候,我必须开始一个“动画”:

...
jpanel1.setBackground(Color.Black);

Delay(milli)   

jpanel1.setBackground(Color.White);
...

等等。

GUI 本身及其背后的所有逻辑都有效。只是这次依赖的颜色更改不起作用。我读过,swing 不是线程安全的,但我发现的所有示例都向我展示了如何启动另一个线程(例如在后台),但从未展示过如何停止当前的 swing-gui 线程。

编辑:

应用程序应按以下方式工作:

  1. 读取配置文件,设置 jframe。
  2. 正在询问一些简单的问题
  3. 打开一个对话框,其中解释了动画。
  4. 用户单击“确定”后,动画(一些颜色闪烁)开始。颜色和颜色变化之间的延迟取决于配置
  5. 打开另一个对话框,程序继续 -> jframe 内的新 jpanel、按钮等。

在线不起作用的是颜色变化之间的延迟。我现在明白为什么它不起作用了,我正在尝试构建一个计时器,它会激活一个 Action 列表,然后更改颜色并停止计时器...对于一个简单的延迟来说似乎需要做很多工作...而且我有重新组织应用程序中的整个动画。

最佳答案

看看:https://timingframework.dev.java.net/

以及 http://filthyrichclients.org/ 中的样本

它们提供了一些关于动画如何工作和使用计时器框架的非常好的信息。您将对它的工作原理有一个很好的理解。

阅读完这些内容后,我用 Swing 制作了一个示例动画:

count down demo app http://img580.imageshack.us/img580/742/capturadepantalla201004wd.png 具有 blog.stackoverflow.com 页面的 Java 应用程序(单击图像观看演示视频)

但我什至不确定你想要实现什么。

编辑

我阅读了有关计时框架的内容,以更好地了解其全部内容,但实际上我没有使用它(创建没有线性时间的动画很有用 - 即没有像我这样的每秒,但是像 1, 5 这样的东西, 3, 2 秒)

我在上面的演示中使用的代码正是:

final Timer imageTimer = new Timer();
imageTimer.schedule( new TimerTask() {
    public void run() {
        changeImage();
    }
}, 0, 10000 ); //<-- every 10 seconds. 

“stackoverflowing”和倒计时的动画使用类似的方法。

关于java - 如何在 Swing 应用程序中使用延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775550/

相关文章:

java - Android 休息客户端

java - 从类更改 Activity 中的对象

java - 为什么我的 JButtons 在放入 JPanel 的构造函数时不显示?

另一个类中的 Java jbutton

multithreading - 为什么 Tokio 返回错误 "Cannot drop a runtime in a context where blocking is not allowed"?

java - 如何每 2 秒(一遍又一遍)从 URL 加载文件?

java - JPanel在使用延迟时不会实时更新

java - 使用 Java Swing 组件的 Z 顺序

c - 在多线程程序中为 system() 向下传递信息

multithreading - 没有匹配函数调用 ‘std::thread::thread(<unresolved overloaded function type>)’