Bild laden über einen JFileChooser in ein JFrame
Bin ich zu schreiben versucht, einen code, der ein Bild anzeigt, ausgewählt mit einem JFileChooser in einen anderen JFrame .Ich habe versucht den folgenden code unter aber habe nur die folgenden Fehler.
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)
Hier ist der 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) {}
Nie tun, dass in den code gebrochen! Stattdessen catch(IOException e1) { e1.printStackTrace(); }
InformationsquelleAutor | 2012-05-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Wert
img
haben nur dann einen realen Wert, nachdem der Benutzer auf den button und wählt die Datei, um diese anzuzeigen. Bis zu diesem Zeitpunkt den Wert vonimg
istnull
, so dass, wenn Sie weiterhin durch Ihre Methode und die Linie nenntImageIcon icon=new ImageIcon(img);
es versucht, erstellen Sie eineImageIcon
Objekt fürnull
.Um dies zu korrigieren, sollten Sie nur die Erstellung der
ImageIcon
wenn der Benutzer gewählt hat, die Datei. Hier ist eine änderung, die sollte näher arbeiten korrekt. (siehe die Kommentare//ADDED
und//REMOVED
im code unten zu sehen, die änderungen...Zu erklären, was ich geändert habe...
label
wird jetzt erstellt werden, wie eine leereJLabel
beim ersten start des Programms. Es wird auch gespeichert, wie eine Globale variable, damit wir später darauf zugreifen kannimg
erstellt wird, wie vorher, und es wird dann geladen in Ihremlabel
mitsetIcon();
revalidate()
undrepaint()
um sicherzustellen, dass das Bild gezeichnet wird, nachdem es festgelegt ist.InformationsquelleAutor wattostudios
Den
ImageIO.read
wird nur ausgeführt, wenn das spezifischeJButton
gedrückt wird. Das ist, weil es im inneren desActionListener
. Deshalbimg
ist null, was bewirkt, dass einNullPointerException
wennImageIcon icon=new ImageIcon(img)
ausgeführt wird.InformationsquelleAutor Radu Murzea