Java 如何让两个方法在单独的类中等待,然后再继续执行?

Java 如何让两个方法在单独的类中等待,然后再继续执行?,java,swing,java-8,Java,Swing,Java 8,我有两个类,BlackJack和BlackJackPane,BlackJack有一个名为dealCards()的方法它通过从第一个玩家到最后一个玩家循环两次,给出一个名为玩家的类,就像在真正的21点游戏中,每个玩家一次发一张牌一样 BlackJackPane是一个包含jbutton和jlabel的JFrame。单击JButtondeal时有一个.actionCommand(“deal”)和一个带有Lambda表达式的ActionListener,该表达式调用BlackJackPane中的实例变量

我有两个类,
BlackJack
BlackJackPane
BlackJack
有一个名为
dealCards()的方法
它通过从第一个
玩家
到最后一个
玩家
循环两次,给出一个名为
玩家
的类,就像在真正的21点游戏中,每个玩家一次发一张牌一样

BlackJackPane
是一个包含jbutton和jlabel的JFrame。单击JButton
deal
时有一个
.actionCommand(“deal”)
和一个带有Lambda表达式的
ActionListener
,该表达式调用
BlackJackPane
中的实例变量
blackjack
来处理卡片,
blackjack.deacards()
ActionListener
还可以确定
玩家
从常规52张牌组中获得的牌的类型,以显示
玩家
拥有的正确的

我更愿意让
BlackJack
中的
dealCards()
方法在将
Card
传递给
Player
之后等待JLabel的创建并显示在JFrame中,但是,我不知道如何跨类执行此操作。我对如何改进代码的其他创造性选择或技巧持开放态度

我试图将类封装起来,并将I/O限制在
BlackJackPane

这是我的班级
BlackJack

public class BlackJack
{

   private final Deck deck;
   private final ArrayList<Player> player;
   private final int numOfPlayers;

   public BlackJack(int players)
   {
       this.numOfPlayers = players + 1; // +1 for dealer, dealer is always first in arrayList
       this.deck = new Deck(Deck.TYPE[0]);
       this.player = new ArrayList();
       for (int i = 0; i < players + 1; i++)
       {
           this.player.add(new Player((i == 0))); //i == 0 is to say true to Player constructor that it is the dealer or cpu
       }
   }

   public void DealCards()
   {
       deck.shuffle();

       for (int i = 0; i < 2; i++)
       {
           for (int j = 0; j < player.size(); j++)
           {
               player.get(j).getHand().add(deck.getCard(0));
               deck.remove(0);
           }
       }
   }
}

你可以重新定义你的
dealCards
方法,在每张卡发完之后调用一些回调

public void dealCards(BiConsumer<Player, Card> onDealtCallback) {
    for (Player player : players) {
        Card dealt = this.getNextCardToDeal();
        onDealtCallback.accept(player, dealt);
    }
}
我不能说这是最面向对象的方法,也不能很好地将状态和UI分开。但它应该做你想做的事


(注意:这里不是代码审查的地方,因此我不想就“如何改进代码”提供进一步建议。)

您可以重新定义
dealCards
方法,在每张卡发完后调用一些回调

public void dealCards(BiConsumer<Player, Card> onDealtCallback) {
    for (Player player : players) {
        Card dealt = this.getNextCardToDeal();
        onDealtCallback.accept(player, dealt);
    }
}
我不能说这是最面向对象的方法,也不能很好地将状态和UI分开。但它应该做你想做的事


(注意:这里不是进行代码审查的地方,因此我不想就“如何改进代码”提供进一步建议。)

我今晚会尝试实施,然后回复您我今晚会尝试实施,然后回复您
public void callIt() {
    this.blackJack.dealCards(this::drawLabel);
}

public void drawLabel(Player player, Card card) {
    // TODO
}