Java Sleep - 执行顺序问题

时间:2018-06-04 21:48:37

标签: java awt event-dispatch-thread

我正在编写一个游戏," Memo-Test":

成对的小块,混合,面朝下,每转一圈,玩家变成两件:如果它们是相同的,它们被移除(面朝上),如果它们不同,程序等待1第二,让玩家记住他们的位置,然后将他们面朝下。

我为大学作业编程。一般来说,订购,混合件,点击并使它们转动,工作正常。

一切都很好,直到我必须实施"一秒等待" (void espera(int i,我将定义等待的秒数):

public void espera(int i) {
try {
    TimeUnit.SECONDS.sleep(i);
} catch (InterruptedException ex) {
    Logger.getLogger(PRO2PracticaFinal.class.getName()).log(Level.SEVERE, null, ex);
    }
}

起初,我做了它" TimeUnit.SECONDS.sleep(1)"在同一方法中,在" joc.espera(1)"行,等等:

joc.addMouseListener(new MouseAdapter() {
    @Override 
    public void mousePressed(MouseEvent e) {
        if (!jugada) {
            mouse_x1 = e.getX() / 150;
            mouse_y1 = e.getY() / 150;
            id_1 = joc.getID(mouse_x1, mouse_y1);
            joc.click(mouse_x1, mouse_y1);
            jugada = true;
            joc.inicia(true);
        } else {
            mouse_x2 = e.getX() / 150;
            mouse_y2 = e.getY() / 150;
            id_2 = joc.getID(mouse_x2, mouse_y2);
            joc.click(mouse_x2, mouse_y2);
            jugada = false;
            joc.torn++;
            joc.imprimir_matriu();
            if (id_1 == id_2) {
                joc.set_trobades(mouse_x1, mouse_y1, mouse_x2, mouse_y2);
            }
            joc.espera(1);
            joc.tapa_jugada();
        }
    }
});

想法是click()方法转动棋子(面朝上),一旦面朝上(并增加转弯等),开始等待1秒并再次覆盖所有。

问题出现在这里:

在卡面朝上转动之前等待开始,导致两种情况:

**案例1 **:两个芯片是相同的,当转动第一个时,没有问题。但是当转动第二个时:单击,开始等待,然后转动选项卡,并调用覆盖除找到的对之外的所有内容的方法(tapa_jugada)。它应该在转动标签后运行等待。

**案例2 **:两张卡不同,转第一张时没有问题。当转动第二个时:点击,开始等待,当等待结束时,快速将面朝上的卡片(甚至没有注意到)执行覆盖所有转动面朝下的方法(不允许玩家看到它) )。

为什么会这样?为什么不按代码的顺序执行?我试过就像我在这里提到的那样,在同一个类中调用一个方法,甚至在另一个类中调用方法(做同样的事情,等待)。但我总能得到相同的结果。为什么它不遵循代码顺序?

0 个答案:

没有答案