2013-07-03 1 views
0

Je sais que cela est vraiment simple, mais depuis que je suis instancié la classe, je ne comprends pas pourquoi je reçois cette exception:Pourquoi est-ce que j'obtiens une exception NullPointerException lorsque j'essaie d'exécuter mon JFrame?

Exception dans le thread « principal » java.lang.NullPointerException

à javax.swing.ImageIcon. (ImageIcon.java:181)

à GameFrame. (GameFrame.java:16)

à GameFrame.main (GameFrame.java:88)

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

public class GameFrame extends JFrame implements ActionListener{ 
    //Mini games and main panel components 
    private JPanel MainPanel; 
    private JPanel gamePanel1, gamePanel2, gamePanel3, gamePanel4, gamePanel5, gamePanel6, gamePanel7, gamePanel8, gamePanel9; 
    private JPanel[] gamePanels = {gamePanel1, gamePanel2, gamePanel3, gamePanel4, gamePanel5, gamePanel6, gamePanel7, gamePanel8, gamePanel9}; 
    private JButton[][] buttons; 
    private int turn; 

    //X and O images 
    private JLabel X = new JLabel(); 
    private ImageIcon x = new ImageIcon(getClass().getResource("/Images/X.PNG")); 
    private JLabel O = new JLabel(); 
    private ImageIcon o = new ImageIcon(getClass().getResource("/Images/O.PNG")); 


    //constructor  
    public GameFrame() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     pack(); 
     //gf.setSize(800,600); 
     setVisible(true); 

     setUpMainPanel(); 
     add(MainPanel); 
    } 

    public void setUpMainPanel() { 
     //sets the layout 
    } 


    public static void main(String[] args) { 
     GameFrame frame = new GameFrame(); 
    } 
} 

J'ai essayé de faire toutes les choses du constructeur (par ex. setVisible (true)) dans main() mais j'ai la même erreur. Étonnamment, il n'y a pas beaucoup d'informations facilement trouvables à ce sujet. Pourquoi l'imageIcon lui donne-t-il un problème? Merci pour votre aide les gars!

+0

Où puisez-vous le NPE? – JHS

+2

L'information easy findable se trouve dans votre message d'erreur. Publiez la pile complète. – jlordo

+1

Je suppose que vous n'avez pas besoin du "/" principal de votre nom de fichier. – camickr

Répondre

4

Je suppose que votre application ne trouve pas les images.

Pouvez-vous ajouter un

System.out.println(getClass().getResource("/Images/X.PNG")); 

et afficher les résultats? Je suppose que le résultat affichera 'null'. Si tel est le cas, l'emplacement de l'image est incorrect, par exemple, la barre oblique peut être incorrecte ou le boîtier du fichier ou du chemin.

+0

Bonne estimation, le chemin doit être sensible à la casse aussi. –

+0

Je pense que vous pourriez avoir raison. Avec quoi dois-je mener en termes d'URL locale? Devrait-il être "src/Images/X.PNG" ou quoi? –

+0

Regardez dans le .jar produit avec 7Zip ou WinZip. Probablement pas avec "src". Être un fichier zip, les noms sensibles à la casse sont un must. –

0

Vous pouvez essayer les suivantes

BufferedImage image = ImageIO.read(getClass().getResource("/Images/X.PNG")); 
    if(image != null) 
     ImageIcon x = new ImageIcon(image); 
0
//X and O images 
    private JLabel X = new JLabel(); 
    //try changing these around; EX: 
    private ImageIcon x = new ImageIcon(getClass().getResource("X.PNG")); 
    private ImageIcon x = new ImageIcon(getClass().getResource("Images/X.PNG")); 
    private JLabel O = new JLabel(); 
    private ImageIcon o = new ImageIcon(getClass().getResource("previousFolder/Images/O.PNG")); 
0

Il n'y a pas d'image à cet endroit "/Images/X.PNG". Mettez une image "X.PNG" dans/Répertoire des images

+0

J'en ai un là-dedans. Je suis nouveau à éclipse. Où dois-je placer le répertoire d'images? J'ai mes projets Java, bin, .settings et src. –

+0

essayez de mettre vos images dans le dossier Projet (même dossier, où sont bin, src et .settings). Et dans le code, utilisez '... getResource (" x.png ")'. – Sk1X1

0

J'ai fini par placer

X = new JLabel(); 
x = new ImageIcon(getClass().getResource("/Images/X.PNG")); 

O = new JLabel(); 
o = new ImageIcon(getClass().getResource("/Images/O.PNG")); 

dans le

public void actionPerformed(ActionEvent e) { 
Questions connexes