Java 使用JFileChooser将图像加载到JLabel图标中

Java 使用JFileChooser将图像加载到JLabel图标中,java,swing,jlabel,jfilechooser,imageicon,Java,Swing,Jlabel,Jfilechooser,Imageicon,我试图从某人的计算机加载一个文件,并将其作为图标放入标签中。当我尝试运行它时,我得到一个空指针错误。当我到达设置图标代码时,它会断开 /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { T

我试图从某人的计算机加载一个文件,并将其作为图标放入标签中。当我尝试运行它时,我得到一个空指针错误。当我到达设置图标代码时,它会断开

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                TheChooser frame = new TheChooser();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public TheChooser() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JButton searchButton = new JButton("Search Picture");
    searchButton.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
            fc.setFileFilter(filter);
            int response = fc.showOpenDialog(null);
        try{
            if (response == JFileChooser.APPROVE_OPTION) {
                String pathName = fc.getSelectedFile().getPath();
                JOptionPane.showMessageDialog(null, pathName);
                ImageIcon icon = new ImageIcon(pathName);
                picPanel.setIcon(icon);
            } else {
                JOptionPane.showMessageDialog(null, "Feel Free to Look Later");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
    });
    searchButton.setBounds(141, 11, 139, 23);
    contentPane.add(searchButton);

    JLabel picPanel = new JLabel("");
    picPanel.setIcon(null);
    picPanel.setBounds(10, 58, 414, 192);
    contentPane.add(picPanel);
}
这个怎么办?不起作用

我试着做下面的修复,但是我仍然得到一长串的错误

            java.lang.NullPointerException
                at chooser.TheChooser$2.mouseClicked(TheChooser.java:70)
                at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
                at java.awt.Component.processMouseEvent(Unknown Source)
                at javax.swing.JComponent.processMouseEvent(Unknown Source)
                at java.awt.Component.processEvent(Unknown Source)
                at java.awt.Container.processEvent(Unknown Source)
                at java.awt.Component.dispatchEventImpl(Unknown Source)
                at java.awt.Container.dispatchEventImpl(Unknown Source)
                at java.awt.Component.dispatchEvent(Unknown Source)
                at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
                at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
                at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
                at java.awt.Container.dispatchEventImpl(Unknown Source)
                at java.awt.Window.dispatchEventImpl(Unknown Source)
                at java.awt.Component.dispatchEvent(Unknown Source)
                at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
                at java.awt.EventQueue.access$200(Unknown Source)
                at java.awt.EventQueue$3.run(Unknown Source)
                at java.awt.EventQueue$3.run(Unknown Source)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
                at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
                at java.awt.EventQueue$4.run(Unknown Source)
                at java.awt.EventQueue$4.run(Unknown Source)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
                at java.awt.EventQueue.dispatchEvent(Unknown Source)
                at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
                at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
                at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
                at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                at java.awt.EventDispatchThread.run(Unknown Source)
            java.lang.NullPointerException
                at chooser.TheChooser$2.mouseClicked(TheChooser.java:70)
                at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
                at java.awt.Component.processMouseEvent(Unknown Source)
                at javax.swing.JComponent.processMouseEvent(Unknown Source)
                at java.awt.Component.processEvent(Unknown Source)
                at java.awt.Container.processEvent(Unknown Source)
                at java.awt.Component.dispatchEventImpl(Unknown Source)
                at java.awt.Container.dispatchEventImpl(Unknown Source)
                at java.awt.Component.dispatchEvent(Unknown Source)
                at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
                at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
                at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
                at java.awt.Container.dispatchEventImpl(Unknown Source)
                at java.awt.Window.dispatchEventImpl(Unknown Source)
                at java.awt.Component.dispatchEvent(Unknown Source)
                at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
                at java.awt.EventQueue.access$200(Unknown Source)
                at java.awt.EventQueue$3.run(Unknown Source)
                at java.awt.EventQueue$3.run(Unknown Source)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
                at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
                at java.awt.EventQueue$4.run(Unknown Source)
                at java.awt.EventQueue$4.run(Unknown Source)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
                at java.awt.EventQueue.dispatchEvent(Unknown Source)
                at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
                at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
                at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
                at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                at java.awt.EventDispatchThread.run(Unknown Source)

我猜,您已将
picPanel
声明为类成员。
JLabel picPanel
(朝向底部)不是您在单击的
鼠标中从
setIcon
引用的面板。如果没有类成员
picPanel
,则会导致编译错误,因为在尝试在
mouseClicked
中访问本地
picPanel
之前,需要声明本地
picPanel

移动JLabel picPanel=新JLabel(“”);在添加侦听器之前,可以修复此问题。并去掉设置图标(null)
。但是,我也不知道在你的代码中,你可能还想用
picPanel
做些什么,所以你可能想去掉本地声明,因为它隐藏了类成员。所以基本上

JLabel picPanel = new JLabel();
searchButton.addMouseListener(new MouseAdapter()
使用


以下是完整程序中的修复程序

public class TheChooser extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TheChooser frame = new TheChooser();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    private JPanel contentPane;
    private JFileChooser fc = new JFileChooser();
    private JLabel picPanel;

    public TheChooser() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        //JLabel picPanel = new JLabel("");

        picPanel = new JLabel();
        JButton searchButton = new JButton("Search Picture");
        searchButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
                fc.setFileFilter(filter);
                int response = fc.showOpenDialog(null);
                try {
                    if (response == JFileChooser.APPROVE_OPTION) {
                        String pathName = fc.getSelectedFile().getPath();
                        JOptionPane.showMessageDialog(null, pathName);
                        ImageIcon icon = new ImageIcon(pathName);
                        picPanel.setIcon(icon);
                    } else {
                        JOptionPane.showMessageDialog(null, "Feel Free to Look Later");
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        searchButton.setBounds(141, 11, 139, 23);
        contentPane.add(searchButton);
        picPanel.setBounds(10, 58, 414, 192);
        contentPane.add(picPanel);
    }
}

你说某人的电脑是什么意思??你是说该文件位于另一台计算机上吗???
public class TheChooser extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TheChooser frame = new TheChooser();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    private JPanel contentPane;
    private JFileChooser fc = new JFileChooser();
    private JLabel picPanel;

    public TheChooser() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        //JLabel picPanel = new JLabel("");

        picPanel = new JLabel();
        JButton searchButton = new JButton("Search Picture");
        searchButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
                fc.setFileFilter(filter);
                int response = fc.showOpenDialog(null);
                try {
                    if (response == JFileChooser.APPROVE_OPTION) {
                        String pathName = fc.getSelectedFile().getPath();
                        JOptionPane.showMessageDialog(null, pathName);
                        ImageIcon icon = new ImageIcon(pathName);
                        picPanel.setIcon(icon);
                    } else {
                        JOptionPane.showMessageDialog(null, "Feel Free to Look Later");
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        searchButton.setBounds(141, 11, 139, 23);
        contentPane.add(searchButton);
        picPanel.setBounds(10, 58, 414, 192);
        contentPane.add(picPanel);
    }
}