2014-01-08 3 views
0

im, делая карточную игру на Java для задания, и я ударил проблему.Ошибка 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 Любая помощь очень ценится :)

+0

StackTrace, пожалуйста, – bowmore

+0

Исключение в нити "АВТ-EventQueue-1" java.lang.NullPointerException \t в DisplayableCard.display (DisplayableCard.java:16) \t в CardGamePanel.go (CardGamePanel.java:31) \t at simple $ 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

Спасибо :) Thats очистил эту проблему. im не уверен, почему его отображение карты едва на экране. – user2291903

Смежные вопросы