2013-07-28 103 views
0

这个小程序是一个简单的关于我为一个类项目创建的网站中的开发者页面。我正在尝试为每个不同的JButton显示图像和生物。 我在与编译的问题,我一直在这条线尝试显示图像时出现NullPointerException?

danPic = new ImageIcon(getClass().getResource("pics/danSkaggs.jpg"));

这我假设它会null,因为根据该目录也找不到图像获得NullPointerException错误 我给它。然而,我不明白我可以做什么不同,我看不出如何编写目录的任何问题。该目录是pics/filename.jpg,并且该文件夹与Java代码位于同一个包中。

这里是完整的源代码。

import java.util.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class Developers extends JApplet{ 
private JButton danButton = new JButton("Dan Skaggs"); 
private JButton brandonButton = new JButton("Brandon Shaw"); 
private JButton jamesButton = new JButton("James Simpson"); 
private JLabel bioLabel = new JLabel("Please click one of the buttons on the left."); 
JPanel centerPanel = new JPanel(new GridLayout(1, 2)); 
JPanel mainPanel = new JPanel(new BorderLayout()); 
JPanel westPanel = new JPanel(new GridLayout(1, 3)); 
private ImageIcon danPic; 
private ImageIcon brandonPic; 
private ImageIcon jamesPic; 
private JLabel dLabel; 
private JLabel bLabel; 
private JLabel sLabel; 



//This array carries the Bios of the group project members 
String[] bio = new String[]{"Insert Bio", 
    "Insert Bio", 
    "Insert Bio"}; 


public Developers(){ 
    mainPanel.add(westPanel, BorderLayout.WEST); 
    westPanel.add(danButton); 
    westPanel.add(brandonButton); 
    westPanel.add(jamesButton); 


    centerPanel.add(bioLabel); 
    mainPanel.add(centerPanel, BorderLayout.CENTER); 
    danButton.addActionListener(new Handler()); 
    brandonButton.addActionListener(new Handler()); 
    jamesButton.addActionListener(new Handler()); 

    danPic = new ImageIcon(getClass().getResource("pics/danSkaggs.jpg")); 
    brandonPic = new ImageIcon(getClass().getResource("pics/brandonShaw.jpg")); 
    jamesPic = new ImageIcon(getClass().getResource("pics/jamesSimpson.jpg")); 

    dLabel = new JLabel (danPic); 
    bLabel = new JLabel (brandonPic); 
    sLabel = new JLabel (jamesPic); 
    centerPanel.add(dLabel); 
    add(mainPanel); 
} 


private class Handler implements ActionListener{ 
    public void actionPerformed(ActionEvent event){ 
     if(event.getSource()== danButton){ 
      bioLabel.setText(bio[0]); 
      centerPanel.add(dLabel); 
     } 
     else if(event.getSource()== brandonButton){ 
      bioLabel.setText(bio[1]); 
      centerPanel.add(bLabel); 
     } 
     else if(event.getSource()== jamesButton){ 
      bioLabel.setText(bio[2]);  
      centerPanel.add(bLabel); 
     } 
    } 
}//end Handler class 
}//end Developer class 

回答

0

所以getResource正在恢复null:你的图片路径是错误的。请注意,这些是相对路径(相对于您用getClass获取的类),因此您可能会丢失使其成为绝对路径的初始斜杠。

0

这应该是:

danPic = new ImageIcon(getClass().getClassLoader().getResourceAsStream("danSkaggs.jpg"));

这将从类路径假设pics目录是类路径上加载图像。

0

getClass().getResource("pics/danSkaggs.jpg")是相对路径。如果你的类是在一个包com.mydomain它希望找到图像中/com/mydomain/pics/danSkaggs.jpg

如果类和图像都在同一个包只需使用getResource("danSkaggs.jpg")。有关更多详细信息,请检查this comment示例代码,演示如何使用类加载资源,或者更好地使用类加载器。

1

改为使用ImageIO,它会给exception您可以捕获并相应地进行处理。

或者

danPic = new ImageIcon(getClass().getResource("pics/danSkaggs.jpg")); 

你缺少/图片是包的名称,必须使用/使url其他明智图片将嵌入到父目录名称以使mistake.So使用(差路)

danPic = new ImageIcon(getClass().getResource("/pics/danSkaggs.jpg")); 

Exception是第一个,因为它首先执行更改其他两个语句正在获取图像。

我刚测试过它工作正常。

相关问题