簡體   English   中英

Java秋千紙牌游戲錯誤

[英]Java swing card game error

我正在做一個Java紙牌游戲來做作業,我碰到了一個問題。

下面的代碼在不同的類中。

cgp類。

private DisplayableDeck deck = new DisplayableDeck("b1fv.png");
DisplayableCard[] cards = new DisplayableCard[10];
private Thread[] theThreads = new Thread[2];
private int[] players = new int[2];
private Deck D = new Deck();
int count = 0;
Graphics g;

CardGamePanel()
{
    D.buildDeck();
    for(int i=0;i<cards.length;i++)
    {
        Random r = new Random();
        int num1 =r.nextInt(52);                       
        cards[i] = new DisplayableCard("1.png",30,30);            
    }
}

 public void go()
{

  if(count < 9 )
  {
      cards[count].display(g); //error here
  }

  count ++;
}

簡單的類擴展了japplet

 private CardGamePanel cgp;
private JButton btnD = new JButton("Flip");
private Thread repaintThread;


public void init()
{
    cgp = new CardGamePanel();
    JPanel panel2 = new JPanel();
    panel2.add(btnD);
    btnD.addActionListener(new ActionListener()
    {

        public void actionPerformed(ActionEvent e)
        {
            cgp.go();
        }
    });
    add(cgp, BorderLayout.CENTER);
    add(panel2, BorderLayout.SOUTH);
    setSize(500,500);
}

--

public class DisplayableCard extends Card implements Displayable {  
public int x,y;
private Image image;
private String imageFilename = "";

public DisplayableCard(String s,int x,int y) {
    imageFilename = s;
    this.x =x;
    this.y=y;
}

public void display(Graphics g) {
    image = new ImageIcon(getClass().getResource(imageFilename)).getImage();
    g.drawImage(image, x, y, null); //ERROR HERE
}

當我單擊按鈕並調用go()方法時,游戲會引發錯誤。

錯誤

Exception in thread "AWT-EventQueue-1"
java.lang.NullPointerException
 at DisplayableCard.display(DisplayableCard.java:16)
 at CardGamePanel.go(CardGamePanel.java:31)
 at simple$1.actionPerformed(simple.java:24)

Ive編寫了錯誤出現在代碼內的位置。

不太確定哪一部分錯了:s非常感謝您的幫助:)

您應該獲得一個現有的Graphic對象。 您可以像這樣從JLabel獲得一個:

public void init(){
cgp = new CardGamePanel();
JPanel panel2 = new JPanel();
panel2.add(btnD);
btnD.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        cgp.go(panel2.getGraphics());
    }
});
  add(cgp, BorderLayout.CENTER);
  add(panel2, BorderLayout.SOUTH);
  setSize(500,500);
}

並在CardGamePanel類中修改其他方法:

public void go(Graphic gr){
  if(count < 9 ){
    cards[count].display(gr); 
  }
  count ++;
}

但是我認為這無濟於事,因為您應該將卡放在頂層容器或頂層容器中的JComponent中。 如果您想了解更多有關此的信息,請單擊此處,這是一個教程。 希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM