2014-10-07 26 views
0

我试图从某人的计算机加载文件,并将其作为图标放入标签中。当我尝试运行它时,我得到一个NullPointer错误。当我到达setIcon代码时它会中断使用JFileChooser将图像加载到JLabel图标

/** 
* 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) 
+0

你是什么人的电脑是指?你的意思是该文件位于另一台计算机上? – Muhammad 2014-10-07 03:21:36

回答

2

我猜测的一个长长的清单,你有picPanel声明为类成员。 JLabel picPanel(底部)是而不是您从setIcon引用的mouseClicked。如果没有类成员picPanel会导致编译错误,因为在尝试访问mouseClicked之前需要声明本地picPanel

移动JLabel picPanel = new JLabel(“”);在添加侦听器之前,可能会解决问题。并摆脱setIcon(null)。但是,再次,我不知道你的代码中还有哪些代码可能试图处理picPanel,所以你可能想要摆脱本地声明,因为它是对类成员的遮蔽。所以基本上,而不是

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

使用

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); 
    } 
} 
+1

谢谢你和1+ – 2014-10-07 03:13:41