2016-09-30 22 views
1

Ich habe zugewiesen, um ein grundlegendes BlackJack Window Programm mit JFrame und Kartenbilder von meinem Lehrer zur Verfügung gestellt zu schreiben. Ich habe alles aus geschrieben, was ich denke, sollte funktionieren, aber es erscheint überhaupt nicht, wenn ich es kompiliere. Vermisse ich etwas?BlackJack Fenster Programm wird nicht angezeigt

Wenn ich das Programm kompiliere, kompiliert es erfolgreich, aber nachdem ich die Datei in meiner Bibliothek BlackJack.java ausgeführt habe, wird nichts ausgeführt und mein Programm wird nicht angezeigt. In der Eingabeaufforderung wird die Ausführung angezeigt, aber auf dem Bildschirm wird kein BlackJack/JFrame angezeigt.

Ich habe versucht, die BlackJack-Klassen und MyJFrame-Klassen anzupassen, so dass der JFrame sofort ausgeführt wird, aber es scheint nicht zu funktionieren. Und in einer früheren Aufgabe mussten wir einen JFrame für diese BlackJack Klasse schreiben, meins funktionierte gut. Ich habe das Gefühl, dass die BlackJack-Geräte Probleme verursachen.

Anmerkung: Wir sind eine Java-Datei mit dem Namen DeckOfCards und GIF-Dateien für Kartenbilder gegeben

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();    
    }   
} 
} 
+0

Hallo Conner, willkommen bei StackOverflow. Ihre Frage enthält nicht die richtigen Informationen, um Ihnen zu helfen. z.B. Wir wissen nicht, was "es überhaupt nicht angezeigt wird, wenn ich es kompiliere" bedeutet, und Sie haben uns nicht gesagt, was Sie getan haben, um das Problem zu lösen. Lesen Sie http: // stackoverflow.com/help/how-to-ask, und dann aktualisieren Sie Ihre Frage mit: ** Was Sie versuchen zu erreichen, Was Sie versucht haben, um es zu lösen, Wie Sie wissen, dass es nicht funktioniert. ** – Tim

+0

Vereinfachen Ihr Beispiel, wo Sie gerade versuchen, einen JFrame zu zeigen. Sobald Sie damit fertig sind, fügen Sie weitere Funktionalitätsebenen hinzu. Sie können einfache Beispiele für die Anzeige von JFrames im Internet finden, wie zum Beispiel: http://alvinalexander.com/java/jframe-example Beachten Sie, wenn Sie Visible (true) und wann und wo die Beispiele es setzen. –

+0

Bitte schauen Sie sich einige [Debugging-Tipps] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) an, die Ihnen hier helfen können. Wenn es ein bestimmtes Problem auftaucht, über das Sie sich nicht sicher sind, dann zögern Sie nicht, nach dem Problem zu fragen. –

Antwort

0

A. Analyse zu verwenden:

Ermöglicht starten Sie Ihren Code manuell ausgeführt wird, Ausgangspunkt Ihres Code ist static void main, wo ich sehen kann, dass das MyFrame-Objekt initialisiert wird. Dann wird das BlackJack-Objekt initialisiert.

B. Das Problem:

  1. Es gibt keine MyFrame Klasse, die Sie in Ihrem Code deklariert haben.
  2. Blackjack erweitert JFrame, daher muss der Verweis über die Methode setVisible(), die in der MyJFrame() -Methode (und nicht im BlackJack-Konstruktor) erfolgt, sichtbar gemacht werden. Die Methode newGame() erstellt erneut ein neues BlackJack-Objekt, aber Sie haben keinen eigenen Konstruktor dafür erstellt. Ich glaube, die Methode MyJFrame sollte in BlackJack-Konstruktor umgewandelt werden.

C. Mögliche Lösung:

  1. entfernen MyJFrame table= new MyJFrame(); aus static void main()
  2. Methode Konvertieren void MyJFrame() zu Black Jack Konstruktor
  3. Statt einem lokalen Blackjack Variable 'ersten' in der Haupt schaffen() Methode, machen Sie es zu einem Klassenmitglied (deklarieren Sie es außerhalb von main()) und initialisieren Sie es in main().
  4. Als Black Jack der Variablen ein Klassenmitglied ist jetzt, in dem Verfahren newGame(), statt eine neue lokale Variable zu schaffen ‚ersten‘, dies zu tun, statt: first = new BlackJack();

Hinweis: Ihr Code mehr Fehler haben kann. Die obige Lösung löst möglicherweise Ihr Problem, warum der Rahmen nicht angezeigt wurde. Es gibt mehr als 1 Möglichkeiten, es zu korrigieren, ich habe nur den bestmöglichen Weg für jetzt zur Verfügung gestellt.

Verwandte Themen