BlackJack窗口程序不会出现

时间:2016-09-30 03:00:45

标签: java jframe actionlistener blackjack

我已经指定使用我的老师提供的JFrame和卡片图像编写基本的BlackJack窗口程序。我从我认为应该工作的东西中写出来,但是当我编译它时它根本没有显示出来。我错过了什么吗?

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

我已经尝试调整BlackJack Classes和MyJFrame类,以便JFrame立即执行,但它似乎并没有起作用。 在之前的作业中,我们需要为这个BlackJack类编写一个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();             
    }        
}
}

1 个答案:

答案 0 :(得分:0)

一个。分析:

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

B中。问题:

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

    1. 从static void main()
    2. 中删除MyJFrame table= new MyJFrame();
    3. 将方法void MyJFrame()转换为BlackJack的构造函数
    4. 不要在main()方法中创建一个本地BlackJack变量'first',而是将其设为一个类成员(在main()之外声明它)并在main()中初始化它。
    5. 由于BlackJack的变量现在是一个类成员,在方法newGame()中,不是先创建一个新的局部变量'first',而是执行此操作:first = new BlackJack();
    6. 注意:您的代码可能有更多错误。以上解决方案可以解决您没有显示框架的问题。有多种方法可以纠正它,我现在只提供了最好的方法。