Java 我';我试图重新设置我的游戏线索,要么不执行主,要么新的黑色jFrame冻结

Java 我';我试图重新设置我的游戏线索,要么不执行主,要么新的黑色jFrame冻结,java,swing,Java,Swing,我和一个在ActionListener中有重置按钮的家伙玩了一个21点游戏。然而,当我使用它时,程序的大部分功能都不存在。重置由以下程序调用: public class BlackjackGameTable extends JFrame{ JButton stayButton = new JButton("STAY"); JButton hitButton = new JButton("HIT"); JButton resetButton = new JButton("Re

我和一个在ActionListener中有重置按钮的家伙玩了一个21点游戏。然而,当我使用它时,程序的大部分功能都不存在。重置由以下程序调用:

    public class BlackjackGameTable extends JFrame{

  JButton stayButton = new JButton("STAY");
  JButton hitButton = new JButton("HIT");
  JButton resetButton = new JButton("Reset");
  JLabel background;
  Hand playerhand = new Hand();
  Hand dealerhand = new Hand();
  JLabel score;
  JLabel text;




  class DecisionListener implements ActionListener{

    public void actionPerformed(ActionEvent a){
      if(a.getSource() == hitButton){

        CardGame2.hit(playerhand, dealerhand);        
        playerAddCardToTable(new CardRender2(playerhand.cardlist.get(playerhand.getSize()-1)));

       score.setText("Your score: " + playerhand.getScore());
       System.out.println("YOU CHOSE HIT! Your Score: " + playerhand.getScore());

      }    
      else if(a.getSource() == stayButton){
        System.out.println("YOU CHOSE STAY!");
      }
      else if (a.getSource() == resetButton){

           //I've tried this below
           dispose();
           new BlackjackGameTable()
           //this almost works but the main doesn't execute

           //I've also tried:
           dispose();
           main(null);
           //I get a black jframe

          //and lastly 
          dispose();
          new BlackjackGameTable().main(null);

      }

    }
  }



  public BlackjackGameTable(){

    this.setTitle("Blackjack");
    background = new TableComponent();
    background.setLayout(null);
    this.add(background,BorderLayout.CENTER);
    this.setVisible(true);
    this.setSize(1300,867);

    JPanel buttonPanel = new JPanel();
    score = new JLabel("Your score: " + playerhand.getScore() );
    text = new JLabel("WELCOME TO BLACKJACK!");
    ActionListener pressChoice = new DecisionListener();
    hitButton.addActionListener(pressChoice);
    stayButton.addActionListener(pressChoice);
    resetButton.addActionListener(pressChoice);
    buttonPanel.setSize(300,150);
    buttonPanel.add(text, BorderLayout.PAGE_START);
    buttonPanel.add(hitButton,BorderLayout.WEST);
    buttonPanel.add(stayButton,BorderLayout.EAST);
    buttonPanel.add(score, BorderLayout.PAGE_END);
    buttonPanel.add(resetButton, BorderLayout.EAST);

    buttonPanel.setVisible(true);
    this.add(buttonPanel, BorderLayout.SOUTH);

    CardGame2.dealIn(playerhand);
    CardGame2.dealInDealer(dealerhand);
    CardRender2 playerFirstCard = new CardRender2(playerhand.cardlist.get(0));
    CardRender2 playerSecondCard = new CardRender2(playerhand.cardlist.get(1));
    background.add(playerFirstCard);
    playerFirstCard.setBounds(0,110, playerFirstCard.image.getWidth(), playerFirstCard.image.getHeight());
    background.add(playerSecondCard);
    playerSecondCard.setBounds(120, 110, playerSecondCard.image.getWidth(), playerSecondCard.image.getHeight());

    CardRender2 dealerFirstCard = new CardRender2();
    CardRender2 dealerSecondCard = new CardRender2(dealerhand.cardlist.get(1));
    background.add(dealerFirstCard);
    dealerFirstCard.setBounds(0, 550, dealerFirstCard.image.getWidth(), dealerFirstCard.image.getHeight());
    background.add(dealerSecondCard);
    dealerSecondCard.setBounds(120,550,dealerSecondCard.image.getWidth(), dealerSecondCard.image.getHeight());

    score.setText("Your score: " + playerhand.getScore());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  } 

  public void playerAddCardToTable(CardRender2 c){

    background.add(c);
    c.setBounds((playerhand.getSize() - 1) * c.image.getWidth(), 110, c.image.getWidth(), c.image.getHeight());
    revalidate();
  }

  public void dealerAddCardToTable(CardRender2 d){
    background.add(d);
    d.setBounds((dealerhand.getSize() -1) * d.image.getWidth(), 550, d.image.getWidth(), d.image.getHeight());
    revalidate();
  }

  public void dealerReveal(){
    CardRender2 dealerOGCard = new CardRender2(dealerhand.cardlist.get(0));
    background.add(dealerOGCard);
    dealerOGCard.setBounds(0, 500, dealerOGCard.image.getWidth(), dealerOGCard.image.getHeight());
  }

  public static void main(String[] args){

    System.out.println("Welcome to Blackjack!\n");
    BlackjackGameTable g = new BlackjackGameTable();
    System.out.println("Dealer hand: " + g.dealerhand.cardlist + " " + g.dealerhand.getScore());
    System.out.println("Your hand: " + g.playerhand.cardlist + " " + g.playerhand.getScore());

    boolean playerStillIn = true;

    while((playerStillIn) && (!CardGame2.isBusted(g.playerhand))){
      if(g.playerhand.getScore() != 21){
        g.text.setText("Hit or stay?");

        if(g.hitButton.getModel().isPressed()){


          g.score.setText("Your score: " + g.playerhand.getScore());
          System.out.println("YOUR HAND: " + g.playerhand.cardlist);
          System.out.println("YOUR SCORE: " + g.playerhand.getScore());
        }
        else if (g.stayButton.getModel().isPressed()){
          playerStillIn = false;

        }
      }
      else{
        System.out.println("BLACKJACK 21!!! YOU WIN BIGLY");
        g.text.setText("BLACKJACK 21!!! YOU WIN BIGLY");
        g.dealerReveal();
        break;
      }
    }

    if (CardGame2.isBusted(g.playerhand)){
      System.out.println("BUSTED! YOU LOSE!!");
      g.text.setText("BUSTED! YOU LOSE!!");
      g.dealerReveal();
    }
    else{

      while(((g.dealerhand.getScore() < 17) && (CardGame2.noBusted(g.playerhand,g.dealerhand))) &&(g.playerhand.getScore() != 21)) {
        CardGame2.hit(g.dealerhand,g.playerhand);
        g.dealerAddCardToTable(new CardRender2(g.dealerhand.cardlist.get(g.dealerhand.getSize()-1)));
      }




      if ((g.playerhand.getScore() == g.dealerhand.getScore())) {
        System.out.println("DEALER HAND: " + g.dealerhand.getHand() + " and SCORE: " + g.dealerhand.getScore());
        System.out.println("YOUR HAND: " + g.playerhand.getHand() + " and SCORE: " + g.playerhand.getScore());
        System.out.println("PUSH");
        g.text.setText("PUSH");
        g.dealerReveal();
      }

      else if((CardGame2.isBusted(g.dealerhand)) && (g.playerhand.getScore() != 21)){
        System.out.println("DEALER HAND: " + g.dealerhand.getHand() + " and SCORE: " + g.dealerhand.getScore());
        System.out.println("YOUR HAND: " + g.playerhand.getHand() + " and SCORE: " + g.playerhand.getScore() );
        System.out.println("YOU WIN");
        g.text.setText("YOU WIN");
        g.dealerReveal();
      }



      else if ((g.playerhand.getScore() < g.dealerhand.getScore())) {
        System.out.println("DEALER HAND: " + g.dealerhand.getHand() + " and SCORE: " + g.dealerhand.getScore());
        System.out.println("YOUR HAND: " + g.playerhand.getHand() + " and SCORE: " + g.playerhand.getScore());
        System.out.println("YOU LOSE");
        g.text.setText("YOU LOSE");
        g.dealerReveal();
      }

      else if ((g.playerhand.getScore() > g.dealerhand.getScore()) && g.playerhand.getScore() != 21)  {
        System.out.println("DEALER HAND: " + g.dealerhand.getHand() + " and SCORE: " + g.dealerhand.getScore());
        System.out.println("YOUR HAND: " + g.playerhand.getHand() + " and SCORE: " + g.playerhand.getScore());
        System.out.println("YOU WIN");
        g.text.setText("YOU WIN");
        g.dealerReveal();
      }



    }
  }
}
公共类BlackjackGameTable扩展JFrame{
JButton stayButton=新JButton(“停留”);
JButton hitButton=新JButton(“点击”);
JButton resetButton=新JButton(“重置”);
JLabel背景;
掌上游戏机手=新手();
Hand Dealhand=新手();
JLabel评分;
JLabel文本;
类DecisionListener实现ActionListener{
已执行的公共无效操作(操作事件a){
if(a.getSource()==hitButton){
纸牌游戏2.击中(玩家手、交易手);
playerAddCardToTable(新的CardRender2(playerhand.cardlist.get(playerhand.getSize()-1));
score.setText(“您的分数:+playerhand.getScore());
System.out.println(“您选择了命中!您的分数:+playerhand.getScore());
}    
else if(a.getSource()==stayButton){
System.out.println(“你选择了留下来!”);
}
else if(a.getSource()==resetButton){
//我在下面试过这个
处置();
新BlackjackGameTable()
//这几乎可以正常工作,但main无法执行
//我也试过:
处置();
主(空);
//我有一个黑色的框架
//最后
处置();
新建BlackjackGameTable().main(空);
}
}
}
公共BlackjackGameTable(){
本.集标题(“21点”);
背景=新的TableComponent();
background.setLayout(null);
添加(背景、边框布局、中心);
此.setVisible(true);
此.setSize(1300867);
JPanel buttonPanel=新的JPanel();
分数=新的JLabel(“你的分数:+playerhand.getScore());
text=新的JLabel(“欢迎来到21点!”);
ActionListener按Choice=新建DecisionListener();
点击按钮。添加ActionListener(按选择);
StatyButton.addActionListener(按选择);
resetButton.addActionListener(按选择);
按钮面板设置尺寸(300150);
buttonPanel.add(文本、边框布局、页面开始);
buttonPanel.add(hitButton,BorderLayout.WEST);
buttonPanel.add(stayButton,BorderLayout.EAST);
buttonPanel.add(分数、边框布局、页码结束);
buttonPanel.add(resetButton,BorderLayout.EAST);
buttonPanel.setVisible(true);
添加(buttonPanel,BorderLayout.SOUTH);
纸牌游戏2.交易(玩家手);
CardGame2.dealInDealer(dealerhand);
CardRender2 playerFirstCard=新的CardRender2(playerhand.cardlist.get(0));
CardRender2 playerSecondCard=新的CardRender2(playerhand.cardlist.get(1));
添加(玩家第一张卡片);
playerFirstCard.setBounds(0110,playerFirstCard.image.getWidth(),playerFirstCard.image.getHeight());
添加(playerSecondCard);
playerSecondCard.setBounds(120110,playerSecondCard.image.getWidth(),playerSecondCard.image.getHeight());
CardRender2 dealerFirstCard=新的CardRender2();
CardRender2 dealerSecondCard=新的CardRender2(dealerhand.cardlist.get(1));
添加(dealerFirstCard);
setBounds(0550,dealerFirstCard.image.getWidth(),dealerFirstCard.image.getHeight());
添加(dealerSecondCard);
setBounds(120550,dealerSecondCard.image.getWidth(),dealerSecondCard.image.getHeight());
score.setText(“您的分数:+playerhand.getScore());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} 
公共无效播放器ADDCardToTable(CardRender2 c){
背景.添加(c);
c、 收进边界((playerhand.getSize()-1)*c.image.getWidth(),110,c.image.getWidth(),c.image.getHeight());
重新验证();
}
公共作废dealerAddCardToTable(CardRender2 d){
背景.添加(d);
d、 setBounds((dealerhand.getSize()-1)*d.image.getWidth(),550,d.image.getWidth(),d.image.getHeight());
重新验证();
}
公开无效交易公告(){
CardRender2 dealerOGCard=新的CardRender2(dealerhand.cardlist.get(0));
添加(DealOrogCard);
setBounds(0,500,dealorogcard.image.getWidth(),dealorogcard.image.getHeight());
}
公共静态void main(字符串[]args){
System.out.println(“欢迎来到21点!\n”);
BlackjackGameTable g=新BlackjackGameTable();
System.out.println(“经销商手册:+g.dealerhand.cardlist+”“+g.dealerhand.getScore());
System.out.println(“你的手:+g.playerhand.cardlist+”“+g.playerhand.getScore());
布尔playerStillIn=true;
而((playerStillIn)和(!CardGame2.isBusted(g.playershand))){
如果(g.playerhand.getScore()!=21){
g、 setText(“命中还是停留?”);
if(g.hitButton.getModel().isPressed()){
g、 score.setText(“您的分数:+g.playerhand.getScore());
System.out.println(“你的手:+g.playerhand.cardlist”);
System.out.println(“您的分数:+g.playerhand.getScore());
}
else if(g.stayButton.getModel().isPressed()){
playerStillIn=假;
}
}
否则{
System.out.println(“21点!!!你赢了很多”);
g、 text.setText(“21点!!!你赢了很多”);
g、 dealerReveal();
打破
}
}
如果(CardGame2.isBusted(g.playerhand)){
System.out.println(“崩溃了!你输了!!”;
g、 setText(“失败!你输了!!”;
g、 dealerReveal();
}
否则{
而((g.dealerhand.getScore()<17)和&(CardGame2.noBusted(g.playerhand,g.dealerhand))&&(g.playerhand.getScore()!=21)){
纸牌游戏2.命中率(g.dealerhand,g.playerhand);
g、 dealerAddCardToTable(新的CardRender2(g.dealerhand.cardlist.get(g.dealerhand.getSize()-1));
}
if((g.playerhand.getScore()==g.dealerhand.getScore()){
System.out.println(“交易商手:+g.dealerhand.getHand()+”和分数:+g.dealerhand.getScore());
System.out.printl