title: How to use JFileChooser to display image in a JFrame or JPanel
body: <p>I have created a program that can change the format of an image. Everything is working, but when I open an image through JFileChooser I am getting  <code>java.lang.ClassCastException</code>. Please can somebody help me. I think I am making a mistake when using the file chooser. I am beginner, please can somebody help me as soon as possible?</p>
  
  <pre><code> package helloWorld;
  
     import java.io.*;
     import java.util.TreeSet;
     import java.awt.*;
     import java.awt.event.*;
     import java.awt.geom.AffineTransform;
     import java.awt.image.*;
     import javax.imageio.*;
     import javax.swing.*;
     import javax.swing.filechooser.FileNameExtensionFilter;
  
     public class SaveImage extends Component implements Action Listener {
  
      String descs[] = {
      "Original", 
          "Convolve : LowPass",
          "Convolve : Sharpen", 
          "LookupOp",
      };
  
      int opIndex;
      private BufferedImage bi, biFiltered;
      private BufferedImage temp;
      int w, h;
  
      public static final float[] SHARPEN3x3 = { // sharpening filter kernel
          0.f, -1.f,  0.f,
         -1.f,  5.f, -1.f,
          0.f, -1.f,  0.f
      };
  
      public static final float[] BLUR3x3 = {
          0.1f, 0.1f, 0.1f,    // low-pass filter kernel
          0.1f, 0.2f, 0.1f,
          0.1f, 0.1f, 0.1f
      };
  
      public SaveImage()
  
      {
  
          try {
              bi = ImageIO.read(new File("")); // yahan kisi image ka path daal de
              w = bi.getWidth(null);
              h = bi.getHeight(null);
              if (bi.getType() != BufferedImage.TYPE_INT_RGB) {
                  BufferedImage bi2 =
                      new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
                  Graphics big = bi2.getGraphics();
                  big.drawImage(bi, 0, 0, null);
                  biFiltered = bi = bi2;
              }
          } catch (IOException e) {
              System.out.println("Image could not be read");
              System.exit(1);
          }
      }
  
  
      public void setimg( String path){}
  
  
      public Dimension getPreferredSize() {
          return new Dimension(w, h);
      }
  
      String[] getDescriptions() {
          return descs;
      }
  
      void setOpIndex(int i) {
          opIndex = i;
      }
  
      public void paint(Graphics g) {
          filterImage();
          g.drawImage(biFiltered, 0, 0, null);
      }
  
      int lastOp;
      public void filterImage() {
          BufferedImageOp op = null;
  
          if (opIndex == lastOp) {
              return;
          }
          lastOp = opIndex;
          switch (opIndex) {
  
          case 0: biFiltered = bi; /* original */
                  return; 
          case 1:  /* low pass filter */
          case 2:  /* sharpen */
              float[] data = (opIndex == 1) ? BLUR3x3 : SHARPEN3x3;
              op = new ConvolveOp(new Kernel(3, 3, data),
                                  ConvolveOp.EDGE_NO_OP,
                                  null);
  
              break;
  
          case 3 : /* lookup */
              byte lut[] = new byte[256];
              for (int j=0; j&lt;256; j++) {
                  lut[j] = (byte)(256-j); 
              }
              ByteLookupTable blut = new ByteLookupTable(0, lut); 
              op = new LookupOp(blut, null);
              break;
          }
  
  
          biFiltered = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
          op.filter(bi, biFiltered);
      }
  
      /* Return the formats sorted alphabetically and in lower case */
      public String[] getFormats() {
          String[] formats = ImageIO.getWriterFormatNames();
          TreeSet&lt;String&gt; formatSet = new TreeSet&lt;String&gt;();
          for (String s : formats) {
              formatSet.add(s.toLowerCase());
          }
          return formatSet.toArray(new String[0]);
      }
  
  
       public void actionPerformed(ActionEvent e) {
  
           if (e.getActionCommand()=="browse")
           {
               //yahan pe bhundd h browse ka
               JFileChooser file = new JFileChooser();
              file.setCurrentDirectory(new File(System.getProperty("user.home")));
              FileNameExtensionFilter filter = new             FileNameExtensionFilter("*.Images","jpg", "gif", "png" );
              file.addChoosableFileFilter(filter);
              int result = file.showSaveDialog(null);
              if (result==JFileChooser.APPROVE_OPTION)
              {
                  File selectedFile = file.getSelectedFile();
                  String Path = selectedFile.getAbsolutePath();
              try{
                  setimg(Path);// bi = ImageIO.read(new File(Path));
              //  temp = new BufferedImage(Path);//       label.setIcon(ResizeImage(Path));
                  //}
              //  catch(IOException e1){
                      System.out.println("file not found");
                  //}
              }
              else if(result== JFileChooser.CANCEL_OPTION)
              {
              //  ImageIcon Mimage = new      ImageIcon("C:\\Users\\Hasnain\\Downloads\\1.jpg");
                  System.out.println("No file choosed");
                  //label.setIcon(Mimage);
              }    
           }
  
           JComboBox cb = (JComboBox)e.getSource();
           if (cb.getActionCommand().equals("SetFilter")) {
               setOpIndex(cb.getSelectedIndex());
               repaint();
           } else if (cb.getActionCommand().equals("Formats")) {
               /* Save the filtered image in the selected format.
                * The selected item will be the name of the format to use
                */
               String format = (String)cb.getSelectedItem();
               /* Use the format name to initialise the file suffix.
                * Format names typically correspond to suffixes
                */
               File saveFile = new File("savedimage."+format);
               JFileChooser chooser = new JFileChooser();
               chooser.setSelectedFile(saveFile);
               int rval = chooser.showSaveDialog(cb);
               if (rval == JFileChooser.APPROVE_OPTION) {
                   saveFile = chooser.getSelectedFile();
                   /* Write the filtered image in the selected format,
                    * to the file chosen by the user.
                    */
                   try {
                       ImageIO.write(biFiltered, format, saveFile);
                   } catch (IOException ex) {
                   }
               }
           }
      };
  
      public static void main(String s[]) {
          JButton button = new JButton("Browse");
          button.setBounds(300, 300, 100, 40);
  
          JFrame f = new JFrame("Save Image Sample");
          f.addWindowListener(new WindowAdapter() {
              public void windowClosing(WindowEvent e) {System.exit(0);}
          });
          SaveImage si = new SaveImage();
          f.add("Center", si);
          JComboBox choices = new JComboBox(si.getDescriptions());
          choices.setActionCommand("SetFilter");
          choices.addActionListener(si);
          JComboBox formats = new JComboBox(si.getFormats());
          formats.setActionCommand("Formats");
          formats.addActionListener(si);
          JPanel panel = new JPanel();
          panel.add(button);
          button.setEnabled(true);
  
          panel.add(choices);
          panel.add(new JLabel("Save As"));
          panel.add(formats);
          f.add("South", panel);
          f.pack();
          f.setVisible(true);
          button.addActionListener(si);
          button.setActionCommand("browse");
      }
  }  
  </code></pre>