2015-04-27 2 views
1

Actuellement, je passe un emplacement de fichier de chaîne codé en dur à ma méthode objet qui utilise la chaîne de la méthode .getResources() pour charger un fichier image. J'essaie maintenant de choisir une image en utilisant un bouton de chargement et de passer l'emplacement de fichier chargé comme une chaîne dans la méthode getResource(). J'utilise la méthode filename.getAbsolutePath() pour récupérer l'emplacement du fichier puis en passant la variable filename dans la méthode de l'objet, mais cela me donne l'erreur suivante - Exception dans le fil "AWT-EventQueue-0" java.lang.NullPointerException. La ligne de code qui indique l'erreur est la ligne .getResources où l'image est chargée. Je vais poster le code ci-dessous pour mieux comprendre mon problème.Comment passer un emplacement de fichier en tant que paramètre en tant que chaîne?

btnLoad.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 


       JFileChooser fc = new JFileChooser(); 
       if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) 
       { 
        File loadImage = fc.getSelectedFile(); 
        String filename = loadImage.getAbsolutePath(); 
        filename = filename.replaceAll("\\\\", "\\\\\\\\"); 
        picLocation = filename; 
        ImageSwing imageSwing = new ImageSwing(filename); 
        System.out.println(filename); 
       } 
       } 

La sortie du nom de fichier est correcte mais ne passera toujours pas dans l'objet.

public class ImageSwing extends JFrame 
    { 
    public JLabel label; 

    public ImageSwing(String S){ 

    super("Card Stunt");    //Window Title 
    setLayout(new FlowLayout());  //lookup grid layout 


    Icon flag = new ImageIcon(getClass().getResource(S));   
    label = new JLabel(flag); 
    label.setToolTipText(S); 
    setSize(1350, 800); 
    //setMinimumSize(new Dimension(1200, 760)); 

    }//main 
} 
+0

est le fichier dans votre environnement de classe? parce que vous appelez getClass(). getResource (S) cela va récupérer le fichier commençant par classpath + filename – sgpalit

+0

Pouvez-vous mettre l'exception complète (y compris la trace de la pile)? Avez-vous essayé de passer par un débogueur et de voir ce qui est nul? –

+0

Une autre astuce pour l'utilisation des noms de fichiers de chaîne est de toujours utiliser les barres obliques pour séparer les répertoires dans le chemin. Java va le trier. – redge

Répondre

1

Il semble que vous créez un nom de fichier absolu avec loadImage.getAbsolutePath(), mais vous essayez d'utiliser comme class path resource avec new ImageIcon(getClass().getResource(S)).

Au lieu de cela, vous devez simplement passer le nom de fichier absolu, en tant que chaîne, à ImageIcon:

Icon flag = new ImageIcon(S); 

En outre, ne pas oublier d'ajouter l'étiquette au cadre ...

getContentPane().add(label); 

En outre, je ne suis pas sur Windows en ce moment, mais je ne pense pas que filename.replaceAll("\\\\", "\\\\\\\\"); est nécessaire.

+0

Icône drapeau = new ImageIcon (S) ;, pourquoi icône de ImageIcon, alors vous devez tester par exemple, parce que si je me souviens bien, tous les ImageIcons ne peuvent pas être Icon, reste est correct, plus un – mKorbel

+0

@mKorbel Not sûr de ce que vous voulez dire, je viens de copier cette partie de votre code. Mais puisque ['ImageIcon' implémente' Icon'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/ImageIcon.html), aucune conversion n'est nécessaire. –

+0

Qu'est-ce que * je pense * @mKorbel veut utiliser 'ImageIcon flag = new ImageIcon (S)' à la place. Ensuite, vous n'avez pas besoin d'utiliser 'if (flag instanceof ImageIcon)' pour tester si 'Icon' est un' ImageIcon'. – user1803551