2016-04-14 3 views
0

Je rencontre des problèmes lors de l'exécution de mes programmes. Fondamentalement, l'étape 1 de mon programme est d'utiliser le JFileChooser pour ouvrir une image et en faire une image tamponnée, assez simple non? c'est ce que j'ai:JFileChooser image to buffered image

JButton open = new JButton(); 
      JFileChooser fc = new JFileChooser(); 
      File selectedFile = fc.getSelectedFile(); 
      fc.setDialogTitle("Please choose an image..."); 
      FileNameExtensionFilter filter = new FileNameExtensionFilter("JPEG", "jpeg", "jpg", "png", "bmp", "gif"); 
      BufferedImage origImage = null; 

      String path = ""; 
      File f = fc.getSelectedFile(); 
      boolean exists = false; 
      fc.addChoosableFileFilter(filter); 


      try { 

       f = fc.getSelectedFile(); 
       exists = f.exists(); 
       path = f.getAbsolutePath(); 

       origImage = ImageIO.read(new File(path)); 
      } 
      catch(Exception e) { 
       System.out.println(e); 
       System.exit(0); 
      } 

im obtenir une exception de pointeur nul (pris par ma déclaration de capture) Je pense qu'il a quelque chose à voir avec le getbsolutepath, mais je ne suis pas sûr. Des idées? Merci!

+0

Quel est le problème avec 'origImage = ImageIO.read (f); '? – MadProgrammer

+0

Vous ne semblez jamais ouvrir le sélecteur de fichier? – MadProgrammer

Répondre

3

Vous semblez jamais réellement ouvrir le fichier chooser, donc aucun fichier n'a été jamais choisi qui expliquerait la NullPointerException

JFileChooser fc = new JFileChooser(); 
fc.setDialogTitle("Please choose an image..."); 
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPEG", "jpeg", "jpg", "png", "bmp", "gif"); 
fc.addChoosableFileFilter(filter); 

BufferedImage origImage = null; 
// You should use the parent component instead of null 
// but it was impossible to tell from the code snippet what that was. 
if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { 
    File selectedFile = fc.getSelectedFile(); 
    try { 
     origImage = ImageIO.read(selectedFile); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

Jetez un oeil à How to Use File Choosers pour plus de détails

+0

comment ferais-je pour mettre fin au programme si l'utilisateur clique sur annuler dans le volet JFileChooser? – Elchapo

+0

@Elchapo Il y a beaucoup de façons de le faire en fonction de votre code, vous pouvez utiliser une instruction 'else' pour appeler simplement System.exit (0)', mais je trouve toujours cela un peu dur. Il peut être préférable de vérifier si 'origImage' est' null' ou non, si c'est le cas, vous laissez simplement l'exécution tomber à la fin de la méthode et si ce n'est pas 'null', vous le traitez comme vous voulez – MadProgrammer

+0

Merci beaucoup! l'origImage == null a du sens! Merci!! – Elchapo

-2

Essayez cette

path = f.getAbsolutePath() remplacer ("\", "\\").

+1

Ce n'est pas obligatoire, 'ImageIO.read' peut prendre une référence' File', donc l'OP ne doit pas se tromper avec les noms de fichiers 'String' et comme l'OP ne les énonce jamais, il ne devrait y avoir aucune raison de changer alors que l'API les aura déjà pris en compte – MadProgrammer