2011-03-26 1 views
-2

Pourquoi est-ce que je reçois un NullPointerException?obtenir une NullPointerException

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 
import java.awt.geom.*; 

public class Tetris 
{ 
    public static void main(String... args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       TFrame w1=new TFrame(); 
       w1.setVisible(true); 
       w1.setDefaultCloseOperation(w1.EXIT_ON_CLOSE); 
      } 
     }); 
    } 
} 
class TFrame extends JFrame 
{ 
    TFrame() 
    { 
     setLayout(null); 
     setSize(400,800); 
     JTPanel jp1=new JTPanel(); 
     jp1.setBackground(Color.red); 
     jp1.setLayout(null); 
     jp1.setBounds(0,0,400,800); 
     add(jp1); 
    } 

} 
class JTPanel extends JPanel 
{ 
    Shape[] s; 
    Rectangle2D r; 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 

     Graphics2D gd=(Graphics2D)g; 

     r=(Rectangle2D)s[0]; 
     System.out.println("first");   
     r.setFrame(80,20,100,200); 
     gd.draw(s[0]); 

    } 
    JTPanel() 
    { 
     //setBackground(Color.red); 
     Shape[] s=new Shape[3]; 
     for(int i=0;i<3;i++) 
     { 
      s[i]=new Rectangle2D.Double(); 
      System.out.println("second"); 
     } 

    } 

} 
+4

Parce que vous êtes en train de faire passer ou d'accéder ou d'invoquer une méthode sur quelque chose qui est 'null'. Vérifiez le numéro de ligne dans la première ligne de la pile et faites-lui un trackback dans le code. – BalusC

+0

Donnez-nous la trace de la pile. –

+1

Si vous montrez la pile, il serait beaucoup plus facile pour quelqu'un d'aider –

Répondre

1

Parce que vous n'initialisez le champ s de la classe JTPanel. Essayez de changer cette ligne:

Shape[] s=new Shape[3]; 

à

this.s=new Shape[3]; 

Avec ce changement, vous serez initialisez le terrain, plutôt que de créer une variable locale.

1

Parce que vous avez déclaré Shape[] s; mais pas l'initialisé et l'utiliser dans la ligne r=(Rectangle2D)s[0];.

1

s dans JTPanel est toujours null. Lorsque vous créez un tableau dans le constructeur, vous l'attribuez à une variable locale appelée s plutôt qu'à la variable d'instance. Cela résoudra votre problème:

JTPanel() 
{ 
    //setBackground(Color.red); 
    s=new Shape[3]; 
Questions connexes