2014-01-08 5 views
0

메신저로 과제물 용 자바 카드 게임을 만들고 문제가 발생했습니다.자바 스윙 카드 게임 오류

아래 코드는 다른 클래스입니다.

cgp 클래스. 내가 버튼을 클릭하고 이동() 메서드를 호출 할 때

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 
} 

게임은 오류가 발생합니다 -

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); 
} 

이 JApplet에

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 ++; 
} 

간단한 클래스를 확장합니다. 오류 코드 내부에 표시되는 위치를

오류

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이의 DisplayableCard.display (DisplayableCard.java:16) CardGamePanel.go에서 \t (CardGamePanel.java:31)에서 \t \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 또는 상위 컨테이너에있는 JComponent. here에 대한 자세한 내용은 자습서입니다. 이해하는데 도움이되기를 바랍니다.

+0

:) 그 문제가 해결되었습니다. 왜 카드가 화면에 간신히 표시되는지 모르겠다. – user2291903