Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个命令之间的延迟Java?-游戏_Java_Multithreading_Delay_Sleep_Wait - Fatal编程技术网

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

两个命令之间的延迟Java?-游戏,java,multithreading,delay,sleep,wait,Java,Multithreading,Delay,Sleep,Wait,我正在用java制作一个匹配的游戏,它进行得非常顺利。问题是,当我点击第二张牌时,如果它们不一样,牌会返回,但它不会显示第二张牌是什么。我正考虑在两张卡片显示后推迟节目,但它不会起作用。它只显示第一张卡,延迟程序,然后执行最初的操作。它不会显示第二张图片。我尝试了wait()和Thread.sleep(1000),但它们都不能产生我想要的效果 // code above where it finds the first card and shows it y.setIcon(FindTheCar

我正在用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");

    }

}

它是有效的。这两句话之间有一点延迟。我怎么能对我的卡片做同样的事情呢?它们实际上是按钮。我还删除了代码,该代码在显示卡片后将其转回,并且卡片保持不变。因此,第二张卡或图标没有问题。

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

  • 多线程
  • 单螺纹
  • 事实证明,多线程很难做到正确,也很容易出错,而且性能的提高是双重的

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

    我看不到您的全部代码,但很可能您滥用了渲染线程,通过使其休眠3秒钟,实际上您阻止了UI在这3秒钟内更新以显示更改,您会在休眠后立即重置该更改


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

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

  • 多线程
  • 单螺纹
  • 事实证明,多线程很难做到正确,也很容易出错,而且性能的提高是双重的

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

    我看不到您的全部代码,但很可能您滥用了渲染线程,通过使其休眠3秒钟,实际上您阻止了UI在这3秒钟内更新以显示更改,您会在休眠后立即重置该更改


    您不应该在呈现线程之外调用UI更新函数,应该将请求提交到呈现线程,并在所需时间内休眠事件线程(或第三个计时器线程)

    切勿在GUI代码(在事件调度线程上运行的代码)中使用
    sleep
    。相反,计划一个Swing
    计时器,该计时器将在延迟后执行操作。基本上,将当前
    睡眠
    后的所有代码复制粘贴到Swing
    计时器中涉及的
    操作执行
    方法中

    切勿在GUI代码(在事件调度线程上运行的代码)中使用
    睡眠
    。相反,计划一个Swing
    计时器,该计时器将在延迟后执行操作。基本上,将当前
    睡眠后的所有代码复制粘贴到Swing
    计时器中涉及的
    操作执行的
    方法中。如上所述,Swing是单线程的。有一个称为事件调度线程的线程,它执行所有渲染,并且是处理所有Swing事件的地方(您的
    ActionListeners
    和其他类型的侦听器都在该线程上运行)。不要在该线程上执行任何长时间运行的进程(服务器调用、磁盘I/O、Thread.wait()s),这一点很重要,因为这会导致GUI挂起。有关更多详细信息和示例,请参阅


    对于您的情况,您可能还想看看Swing,因为它们似乎是为您想要的效果而专门构建的。

    如前所述,Swing是单线程的。有一个称为事件调度线程的线程,它执行所有渲染,并且是处理所有Swing事件的地方(您的
    ActionListeners
    和其他类型的侦听器都在该线程上运行)。不要在该线程上执行任何长时间运行的进程(服务器调用、磁盘I/O、Thread.wait()s),这一点很重要,因为这会导致GUI挂起。有关更多详细信息和示例,请参阅


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

    谢谢大家。使用摆动计时器的工作原理与我所希望的一样。太棒了;我想我应该多看看这些。再次感谢大家!谢谢大家。使用摆动计时器的工作原理与我所希望的一样。太棒了;我想我应该多看看这些。再次感谢大家!