BlackJack window 程序不会出现

BlackJack window program wont show up

我已分配使用我老师提供的 JFrame 和卡片图像编写一个基本的 BlackJack Window 程序。我把我认为应该起作用的所有东西都写出来了,但是当我编译它时它根本没有出现。我是不是漏掉了什么?

当我编译程序时,它编译成功,但是,在我执行库中的文件后 BlackJack.java,没有执行任何东西,我的程序也没有显示。在命令提示符中,它显示它已执行但屏幕上没有显示 BlackJack/JFrame。

我已经尝试调整 BlackJack 类 和 MyJFrame classes 以便 JFrame 立即执行,但它似乎不起作用。 在之前的作业中,我们被要求为这个 BlackJack class 编写一个 JFrame,我的工作得很好。所以我觉得 BlackJack 工具引起了问题。

注意:我们得到了一个名为 DeckOfCards 的 java 文件和供卡片图像使用的 gif 文件

import javax.swing.*;
import java.awt.*; 
import java.awt.event.*;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Vector;
public class BlackJack extends JFrame implements ActionListener
{
private JLabel[] lblPlayer = new JLabel[8];
private JLabel[] lblDealer = new JLabel[8];

private JPanel pnlPlayDeal = new JPanel(new GridLayout(2,8)); 

private DeckOfCards deck = new DeckOfCards();

private Vector <String> playerCardNames = new Vector<String>();
private Vector <String> dealerCardNames = new Vector<String>();

private ImageIcon[] icoPlayerHand = new ImageIcon[8];
private ImageIcon[] icoDealerHand = new ImageIcon[8];

private JButton btnDeal = new JButton("Deal");
private JButton btnPlayer = new JButton("Player");
private JButton btnDealer = new JButton("Dealer");
private JButton btnNew = new JButton("New");
private JButton btnAuthor = new JButton("Author");

private JPanel pnlButtons = new JPanel(new FlowLayout());

private int count = 1;
private int playerval = 0;
private int dealerval = 0;

public void MyJFrame()
{
    for(int i=0;i<8;i++)
    {
        lblPlayer[i] = new JLabel("Player");
        lblDealer[i] = new JLabel("Dealer");
    }
    this.setLocationRelativeTo(null);
    this.setSize(800, 350);
    this.setVisible(true);   
    add(pnlPlayDeal,BorderLayout.CENTER);
    add(pnlButtons,BorderLayout.SOUTH);
    this.addLabels();
    this.addButtons();
    registerListeners();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}    
public void addLabels()
{
    for(int i= 0;i<8;i++)
    {
        pnlPlayDeal.add(lblPlayer[i]);
    }
    for(int i= 0;i<8;i++)
    pnlPlayDeal.add(lblDealer[i]);        
}    
public void addButtons()
{
    pnlButtons.add(btnDeal);
    pnlButtons.add(btnPlayer);
    btnPlayer.setEnabled(false);
    pnlButtons.add(btnDealer);
    btnDealer.setEnabled(false);
    pnlButtons.add(btnNew);
    btnNew.setEnabled(false);
    pnlButtons.add(btnAuthor);
}    
public void registerListeners()
{
    btnDeal.addActionListener(this);
    btnPlayer.addActionListener(this);
    btnDealer.addActionListener(this);
    btnNew.addActionListener(this);
    btnAuthor.addActionListener(this);
}    
public int findRank(String x)
{
    int result=0;
    if(x.startsWith("Two"))
       result=2;
    else if(x.startsWith("Three"))
       result=3;
    else if(x.startsWith("Four"))
        result=4;
    else if(x.startsWith("Five"))
        result=5;
    else if(x.startsWith("Six"))
        result=6;
    else if(x.startsWith("Seven"))
        result=7;
    else if(x.startsWith("Eight"))
        result=8;
    else if(x.startsWith("Nine"))
        result=9;
    else if(x.startsWith("Ten"))
        result=10;
    else if(x.startsWith("Jack"))
        result=10;
    else if(x.startsWith("Queen"))
        result=10;
    else if(x.startsWith("King"))
        result=10;
    else if(x.startsWith("Ace"))
        result=11;
    return result;
}
public int getVal (Vector<String> v)
{
    int total=0;
    Iterator <String> iter = v.iterator();
    while(iter.hasNext())
    {
        total+= findRank(iter.next());
    }
    return total;
}
public void deal()
{
    deck.shuffle();
    playerCardNames.add(deck.deal());
    playerCardNames.add(deck.deal());
    dealerCardNames.add(deck.deal());
    dealerCardNames.add(deck.deal());

    icoPlayerHand[0] = new ImageIcon("cardImages/"
            +playerCardNames.get(0)+".gif");
    icoPlayerHand[1] = new ImageIcon("cardImages/"
            +playerCardNames.get(1)+".gif");
    lblPlayer[0].setIcon(icoPlayerHand[0]);
    lblPlayer[1].setIcon(icoPlayerHand[1]);

    icoDealerHand[0] = new ImageIcon("cardImages/"+
            dealerCardNames.get(0)+".gif");
    icoDealerHand[1] = new ImageIcon("cardImages/card.gif");
    lblDealer[0].setIcon(icoDealerHand[0]);
    lblDealer[1].setIcon(new ImageIcon("cardImages/card.gif"));

    btnDeal.setEnabled(false);
    btnPlayer.setEnabled(true);
    count ++;
}    
public void player()
{
    while(getVal(playerCardNames)<22)
    {
        String choice = JOptionPane.showInputDialog(null, "you have " 
                +getVal(playerCardNames)+" h/s",null);
        if(choice.equalsIgnoreCase("h"))
        {
            playerCardNames.add(deck.deal());
            icoPlayerHand[count] = new ImageIcon("cardImages/"
                    +playerCardNames.lastElement()+".gif");
            lblPlayer[count].setIcon(icoPlayerHand[count]);
            count++;
        }
        else
        break;
    }
    if(getVal(playerCardNames)>21)
    {
        JOptionPane.showMessageDialog(this, "You Busted");
        btnPlayer.setEnabled(false);
        btnNew.setEnabled(true);
    }
    else
    {
        btnPlayer.setEnabled(false);
        btnDealer.setEnabled(true);
    }
}      
public void dealer()
{
    btnDealer.setEnabled(false);
    count=1;
    icoDealerHand[count] = new ImageIcon("cardImages/" 
             +dealerCardNames.lastElement()+".gif");
    lblDealer[1].setIcon(icoDealerHand[count]);
    count ++;
    while(getVal(dealerCardNames)<17)
    {
        dealerCardNames.add(deck.deal());
        icoDealerHand[count] = new ImageIcon("cardImages/" 
                +dealerCardNames.lastElement()+".gif");
        lblDealer[count].setIcon(icoDealerHand[count]);
        count ++;
    }
    if(getVal(dealerCardNames)>21)
        JOptionPane.showMessageDialog(this, "Dealer bust you won");
    else
    whoWon();
    btnNew.setEnabled(true);
}            
public void whoWon()
{
    if(getVal(playerCardNames)>getVal(dealerCardNames))
        JOptionPane.showMessageDialog(this,"You won");
    else
        JOptionPane.showMessageDialog(this,"You lost");
}    
public void newGame()
{
    this.setVisible(false);
    BlackJack game = new BlackJack();
}
public static void main(String[]args)
{
    MyJFrame table= new MyJFrame();
    BlackJack first = new BlackJack();
}
public void actionPerformed(ActionEvent e)
{
    if(e.getSource()==btnAuthor)
        ((JButton)e.getSource()).setText("Conner M");
    if(e.getSource()==btnDeal)
        deal();
    if(e.getSource()==btnPlayer)
        player();
    if(e.getSource()==btnDealer)
        dealer();
    if(e.getSource()==btnNew)
    {
        newGame();             
    }        
}
}

一个。分析:

让我们开始手动执行您的代码,您的代码的起点是 static void main,我可以看到正在初始化 MyFrame 的对象。然后BlackJack的对象正在初始化。

乙。问题:

  1. 没有您在代码中声明的 MyFrame class。
  2. Blackjack 扩展了 JFrame,因此您需要通过 setVisible() 方法将其引用设置为可见,该方法是在 MyJFrame() 方法中完成的(而不是在 BlackJack 的构造函数中)。
  3. 方法 newGame() 再次创建一个新的 BlackJack 对象,但您还没有为此创建自己的构造函数。我认为应该将 MyJFrame 方法转换为 BlackJack 构造函数。

摄氏度。可能的解决方案:

  1. 从 static void main()
  2. 中删除 MyJFrame table= new MyJFrame();
  3. 将方法 void MyJFrame() 转换为 BlackJack 的构造函数
  4. 与其在 main() 方法中创建本地 BlackJack 变量 'first',不如将其设为 class 成员(在 main() 之外声明)并在 main() 中对其进行初始化。
  5. 由于 BlackJack 的变量现在是 class 成员,在方法 newGame() 中,不要创建新的局部变量 'first',而是这样做:first = new BlackJack();

注意:您的代码可能有更多错误。上述解决方案可能会解决您为什么不显示框架的问题。纠正它的方法不止一种,我目前只提供了最好的方法。