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。单击JButtondeal
时有一个.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
}