chargement de l'image à l'aide d'un JFileChooser dans une JFrame
Je suis en train d'écrire un code qui affiche une image sélectionnée à l'aide d'un JFileChooser dans un autre JFrame .J'ai essayé le code suivant ci-dessous, mais seulement eu des erreurs suivantes.
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:228)
at power.<init>(fCGUI.java:53)
at fCGUI.main(fCGUI.java:11)
Voici le code:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class fCGUI
{
public static void main(String []args)
{
power p=new power();
p.setVisible(true);
}
}
class power extends JFrame
{
JFileChooser chooser;
BufferedImage img;
JButton button,button2;
JFrame comp;
String filename;
File file ;
public power()
{
setSize(450,450);
panel.setLayout(new BorderLayout());
JPanel panel=new JPanel();
getContentPane().add(panel);
button =new JButton("press");
panel.add(button,BorderLayout.NORTH);
chooser = new JFileChooser();
ActionListener action=new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (e.getSource()==button)
{
chooser.showOpenDialog(null);
file = chooser.getSelectedFile();
try
{
img=ImageIO.read(file);
}
catch(IOException e1) {}
}
if (e.getSource()==button2)
{
comp.setVisible(true);
}
}
};
ImageIcon icon=new ImageIcon(img);
JLabel label=new JLabel(icon);
JPanel secpanel=new JPanel();
comp=new JFrame();
comp.setSize(650,500);
comp.setLayout(new BorderLayout());
comp.setTitle("View Report");
JRootPane compPane=comp.getRootPane();
Container contePane=compPane.getContentPane();
contePane.add(secpanel);
secpanel.add(label,BorderLayout.CENTER);
button2=new JButton("access");
button2.addActionListener(action);
button.addActionListener(action);
panel.add(button2,BorderLayout.SOUTH);
}
}
catch(IOException e1) {}
Jamais le faire dans le code cassé! Au lieu de cela catch(IOException e1) { e1.printStackTrace(); }
OriginalL'auteur | 2012-05-24
Vous devez vous connecter pour publier un commentaire.
La valeur de
img
va seulement ont une valeur réelle après que l'utilisateur cliquez sur le bouton et de choisir le fichier à afficher. Jusqu'à ce moment, la valeur desimg
estnull
, alors, quand il se poursuit à travers la méthode et les appels de la ligneImageIcon icon=new ImageIcon(img);
, c'est d'essayer de créer unImageIcon
objet pournull
.Pour corriger cela, vous devez seulement créer le
ImageIcon
lorsque l'utilisateur a choisi le fichier. Ici est un changement qui devrait être plus à travailler correctement. (voir les commentaires//ADDED
et//REMOVED
dans le code ci-dessous pour voir les changements...Pour expliquer ce que j'ai changé...
label
maintenant être créé comme un videJLabel
première fois que vous démarrez le programme. Il est également stockée comme une variable globale, de sorte que nous pouvons accéder par la suiteimg
est créé, comme avant, et puis il est chargé dans votrelabel
à l'aide desetIcon();
revalidate()
etrepaint()
de faire en sorte que l'image est dessinée après c'est réglé.OriginalL'auteur wattostudios
La
ImageIO.read
n'est exécuté que lorsque spécifiquesJButton
est pressé. C'est parce que c'est à l'intérieur de laActionListener
. De ce fait,img
est null, ce qui provoque uneNullPointerException
quandImageIcon icon=new ImageIcon(img)
est exécutée.OriginalL'auteur Radu Murzea