Java 如何在For循环中创建睡眠线程?

Java 如何在For循环中创建睡眠线程?,java,android,multithreading,loops,sleep,Java,Android,Multithreading,Loops,Sleep,我正在开发一款纸牌游戏应用程序,我完成了基本的工作,现在我正努力让它看起来更专业。 我想做的第一件事是分发卡片的效果, 我想制作一张洗牌牌效果。 当一张牌给一个玩家时,我希望下一张牌至少有500毫秒的时间差。 思想? 这是我代码中的一部分 private void SetTheGame() { SetShuffleSound(); for ( int i = 0; i < Imagename.length;i++) { Imagename[i] =

我正在开发一款纸牌游戏应用程序,我完成了基本的工作,现在我正努力让它看起来更专业。 我想做的第一件事是分发卡片的效果, 我想制作一张洗牌牌效果。 当一张牌给一个玩家时,我希望下一张牌至少有500毫秒的时间差。 思想? 这是我代码中的一部分

    private void SetTheGame() {
    SetShuffleSound();
    for ( int i = 0; i < Imagename.length;i++) {
        Imagename[i] = (ImageView) findViewById(WTF[i]);
        CountCards();
        Random = getRandom();
        SwitchImages SwitchMe = new SwitchImages(myNewArray[Random]);
        int first = SwitchMe.ChangeImages();
        Imagename[i].setImageResource(myNewArray[Random]);
        Imagename[i].setVisibility(View.VISIBLE);
        CardsCount valueOfCard = new CardsCount(myNewArray[Random]);
        int a = valueOfCard.WhatsMyValue();
        String b = valueOfCard.TheFamily();
        switch (i) {
        case 0:
            if (first != 0) {
                Imagename[0].setImageResource(first);
            }
            FirstColumnComputer.add(a);
            FirstColumnComputerFAMILY.add(b);

            break;
        case 1:
            if (first != 0) {
                Imagename[1].setImageResource(first);
            }
            SecondColumnComputer.add(a);
            SecondColumnComputerFAMILY.add(b);

            break;
        case 2:
            if (first != 0) {
                Imagename[2].setImageResource(first);
            }
            ThirdColumnComputer.add(a);
            ThirdColumnComputerFAMILY.add(b);


            break;
        case 3:
            if (first != 0) {
                Imagename[3].setImageResource(first);
            }
            FourColumnComputer.add(a);
            FourColumnComputerFAMILY.add(b);

            break;
        case 4:
            if (first != 0) {
                Imagename[4].setImageResource(first);
            }
            FifthColumnComputer.add(a);
            FifthColumnComputerFAMILY.add(b);

            break;
        case 5:
            FirstColumnPlayer.add(a);
            FirstColumnPlayerFAMILY.add(b);

            break;
        case 6:
            SecondColumnPlayer.add(a);
            SecondColumnPlayerFAMILY.add(b);

            break;
        case 7:
            ThirdColumnPlayer.add(a);
            ThirdColumnPlayerFAMILY.add(b);

            break;
        case 8:
            FourColumnPlayer.add(a);
            FourColumnPlayerFAMILY.add(b);

            break;
        case 9:
            FifthColumnPlayer.add(a);
            FifthColumnPlayerFAMILY.add(b);

            break;

        }
        Cards.remove(Random);
  //        MakeTheCardPause();
    }
    SentTheLinkedList();
}  

谢谢

这个怎么样?您需要在工作线程中进行睡眠,上面的代码正在创建一个新线程并告诉它睡眠,这对用户没有明显的影响

private void SetTheGame() {
    SetShuffleSound();
    for ( int i = 0; i < Imagename.length;i++) {
        Imagename[i] = (ImageView) findViewById(WTF[i]);
        CountCards();
        Random = getRandom();
        SwitchImages SwitchMe = new SwitchImages(myNewArray[Random]);
        int first = SwitchMe.ChangeImages();
        Imagename[i].setImageResource(myNewArray[Random]);
        Imagename[i].setVisibility(View.VISIBLE);
        CardsCount valueOfCard = new CardsCount(myNewArray[Random]);
        int a = valueOfCard.WhatsMyValue();
        String b = valueOfCard.TheFamily();
        switch (i) {
        case 0:
            if (first != 0) {
                Imagename[0].setImageResource(first);
            }
            FirstColumnComputer.add(a);
            FirstColumnComputerFAMILY.add(b);

            break;
        case 1:
            if (first != 0) {
                Imagename[1].setImageResource(first);
            }
            SecondColumnComputer.add(a);
            SecondColumnComputerFAMILY.add(b);

            break;
        case 2:
            if (first != 0) {
                Imagename[2].setImageResource(first);
            }
            ThirdColumnComputer.add(a);
            ThirdColumnComputerFAMILY.add(b);


            break;
        case 3:
            if (first != 0) {
                Imagename[3].setImageResource(first);
            }
            FourColumnComputer.add(a);
            FourColumnComputerFAMILY.add(b);

            break;
        case 4:
            if (first != 0) {
                Imagename[4].setImageResource(first);
            }
            FifthColumnComputer.add(a);
            FifthColumnComputerFAMILY.add(b);

            break;
        case 5:
            FirstColumnPlayer.add(a);
            FirstColumnPlayerFAMILY.add(b);

            break;
        case 6:
            SecondColumnPlayer.add(a);
            SecondColumnPlayerFAMILY.add(b);

            break;
        case 7:
            ThirdColumnPlayer.add(a);
            ThirdColumnPlayerFAMILY.add(b);

            break;
        case 8:
            FourColumnPlayer.add(a);
            FourColumnPlayerFAMILY.add(b);

            break;
        case 9:
            FifthColumnPlayer.add(a);
            FifthColumnPlayerFAMILY.add(b);

            break;

        }
        Cards.remove(Random);
        long sleepMax = 1000L;
        Random r = new Random();
        long delay = (long) (r.nextDouble() * range);
        Thread.sleep(delay);
    }
    SentTheLinkedList();
}
private void设置游戏(){
SetShuffleSound();
for(int i=0;i
有很多方法可以做到这一点。睡眠(500)是你建议的方式,但不是我建议的方式。这里有两种选择

一个例子

Handler mHandler = new Handler(){           
            public void handleMessage(Message msg){
                super.handleMessage(msg);
                switch(msg.what){
                    case shuffle:
                        // Do something
                        break;
                    case doneShuffle:
                      //Do something
                }
            }       
        };
以下是一个例子:

private class shuffleCards extends AsyncTask<Card, Integer, Long> {
     protected Long doInBackground(Card card) {
         //Do something
            //shuffle deck
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return deck;
     }

     protected void onProgressUpdate(Integer... progress) {
         //Number of shuffled cards??
     }

     protected void onPostExecute(Long result) {
        //Show card
     }
 }
私有类shuffleCards扩展异步任务{
受保护的长沙发背景(卡片){
//做点什么
//洗牌组
//如果调用cancel(),则尽早退出
如果(isCancelled())中断;
}
返回甲板;
}
受保护的void onProgressUpdate(整数…进度){
//洗牌数量??
}
受保护的void onPostExecute(长结果){
//展示卡
}
}
请记住,这只是显示结果的后台任务。主线程将处理实际的卡值,并将它们交给异步任务


祝你好运

你应该检查一下前面的SO问题,它接着解释了如何以你正在尝试的方式正确使用睡眠。你不需要任何线程,只需要使用一个处理程序并发送延迟消息就可以达到你想要的效果。事实上,在Android这样的事件驱动系统上,睡眠并不是实现这一点的正确方法。相反,你应该使用各种机制中的一种来安排未来的事件,并在该事件中处理下一张卡。@JoeBoyle-这是一个通用的Java答案,适用于创建控制台输出消息之间的最短时间,但对于Android UI编程来说,这不是一个特别合适的解决方案。您能创建一个Runnable,然后对其调用postDelayed()并将其传递500毫秒吗?
private class shuffleCards extends AsyncTask<Card, Integer, Long> {
     protected Long doInBackground(Card card) {
         //Do something
            //shuffle deck
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return deck;
     }

     protected void onProgressUpdate(Integer... progress) {
         //Number of shuffled cards??
     }

     protected void onPostExecute(Long result) {
        //Show card
     }
 }