2014-01-08 52 views
0

即时作出一个Java卡片游戏的任务,我已经遇到了问题。Java摇摆卡游戏错误

下面的代码是在不同的类。

cgp class。

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) 

香港专业教育学院写在代码中出现的错误。

不能确定哪一部分是错误的:■任何帮助是非常赞赏:)

+0

堆栈跟踪,请 – bowmore

+0

异常在线程 “AWT-EventQueue的-1” 显示java.lang.NullPointerException \t在DisplayableCard.display(DisplayableCard.java:16) \t在CardGamePanel.go(CardGamePanel.java:31) \t在简单的$ 1.actionPerformed(simple.java:24) – user2291903

+0

你在哪里定义计数?我没有看到你的代码中的任何地方。 – Vinnie

回答

0

你应该得到现有的图形对象。你可以得到一个从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。 如果您想了解更多关于此点击here这是一个教程。我希望它能帮助你理解。

+0

谢谢:)这就解决了这个问题。即时通讯不知道为什么它显示卡虽然勉强在屏幕上。 – user2291903