繁体   English   中英

使用Java与计时器交替显示图像

[英]Alternating images with a timer using java

由于我不是CS专业的学生,​​因此在将编程愿望转换为实际程序时遇到了一些困难。 基本上可以归结为以下几点:如何在标签上交替显示图像,以针对每个图像的特定时间显示每个图像。

所以:说我有图像A和B; 我希望用户看到A持续1000ms,B持续200ms。 这一直循环播放,直到用户按下某个键为止。

现在,我什至可以很容易地将图像加载到面板上,并且我设法使用KeyListener和东西来捕获用户输入,所有这些都很好地工作,并且比我预期的要容易得多。 我也知道如何使用while,for和do..while之类的循环结构,但是此计时器业务很差劲。

我看到各种使用线程的东西,什么也不用,我真的不需要。 这不是关于有效的编程或好的代码,而是关于演示的东西。 任何帮助将不胜感激!

这可能是一个很好的例子: http : //www.java2s.com/Code/Java/Development-Class/UsejavautilTimertoscheduleatasktoexecuteonce5secondshavepassed.htm

如果看起来令人困惑,我可以尝试解释代码

当线程是完成任务的正确工具时,使用线程并不一定会效率低下。

在这种情况下,创建实现Runnable的新类并不是没有道理的,该类包含对要更改图像的标签的引用。

这意味着可以更改映像,而不会导致等待主应用程序的等待,直到挂起它为止。

您可能想避免“忙循环”(基本上是一个while循环,其中没有Thread.sleep()),并查看是否有任何所需的线程退出条件

使用SwingWorker<Void, Void> SwingWorker的doInBackground方法应如下所示:

@Override
protected Void doInBackground() {
    try {
        while (true) {
            displayImage(imageA);
            Thread.sleep(1000L);
            if (isCancelled()) {
                return null;
            }
            displayImage(imageB);
            Thread.sleep(200L);
            if (isCancelled()) {
                return null;
            }
        }
    }
    catch (InterruptedException e) {
        // ignore
    }
    return null;
}

private void displayImage(final Icon image) {
    SwingUtilituies.invokeLater(new Runnable() {
        @Override
        public void run() {
            // display the image in the panel
        }
    });
}

关键侦听器应仅取消SwingWorker。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM