繁体   English   中英

两个命令之间的延迟Java? - 游戏

[英]Delay between two commands Java? - Game

我正在用Java做一个匹配的游戏,进展顺利。 问题是,当我单击第二张卡时,如果它们不相同,则它们会回头,但它永远不会显示第二张卡是什么。 我曾想过在显示两张卡之后延迟程序,但是它不起作用。 它只显示第一张卡,延迟程序,然后首先执行它。 它不会显示第二张图片。 我已经尝试过wait()和Thread.sleep(1000),但是它们都不会产生我想要的效果。

// code above where it finds the first card and shows it
y.setIcon(FindTheCard(es2,'c')); //showing the second card
            try{Thread.sleep(3000L); // delaying
            }catch(Exception e){}

我对线程还很陌生,所以我想运行的第一件事是线程,然后是代码的其余部分,这不是我想要的。 我希望执行y.setIcon(..),然后在其余代码运行之前有一点延迟。 关于我的代码的所有内容都可以完美运行,所以我认为这只是我所缺乏的知识。 我需要的只是延迟。

但是,我也尝试过以下代码:

public class testing {

    public static void main(String[] args) {
        System.out.println("Do this stuff");
        try { Thread.sleep(500); }
        catch ( Exception e ) { }
        System.out.println("Now do everything after this");

    }

}

而且有效。 两个句子之间有一点延迟。 我该如何使用自己的卡片做这些操作-实际上是按钮。 我还删除了显示卡后将其转回的代码,并且这些卡确实保持不变。 因此,第二张卡片或图标没有问题。

有两种方法可以编写图形渲染引擎:

  1. 多线程
  2. 单线程

事实证明,多线程很难正确设置,而且很容易出错,并且性能提升是令人怀疑的。

Java的决定是只有一个线程进行渲染。 结果是您在一个线程中运行事件处理和主逻辑,然后将GUI更新的工作提交给渲染线程。

我看不到您的完整代码,但是很可能您正在滥用渲染线程,通过使其休眠3秒钟,您实际上阻止了用户界面在这3秒钟内进行更新以显示更改,您在休眠后立即将其重置。

您不应该在渲染线程之外调用UI更新功能,而应该将请求提交到渲染线程,并使事件线程(或第三个计时器线程)休眠所需的时间

切勿在GUI代码(在事件调度线程中运行的代码)中使用sleep 而是安排一个Swing Timer ,该Timer将在延迟后执行操作。 基本上,将当前sleep后的所有代码复制粘贴到Swing Timer涉及的actionPerformed方法中。

如前所述,Swing是单线程的。 有一个线程称为事件分发线程,该线程执行所有渲染,并在其中处理所有Swing事件(您的ActionListeners和其他类型的侦听器均在该线程上运行)。 重要的是,不要在该线程上执行任何长时间运行的进程(服务器调用,磁盘I / O,Thread.wait()s),因为这会导致GUI挂起。 请查看本教程以获取更多详细信息和示例。

对于您的情况,您可能还需要查看Swing 计时器 ,因为它们似乎是为达到您想要的效果而专门设计的。

暂无
暂无

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

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