Java 选中时未加载图像

Java 选中时未加载图像,java,swing,jsplitpane,Java,Swing,Jsplitpane,我有一个JSplitPane,理想情况下应该是这样工作的- 左侧的JList应具有与右侧JLabel中显示的图片对应的名称 这些图片可以在项目根目录中的images文件夹中找到 无论出于何种原因,在左侧的JList中选择一个项目对右侧的JLabel没有影响 public class TextureChooser { static Main main; JSplitPane splitPane; JList textureList; JLabel texturePic; String[] te

我有一个
JSplitPane
,理想情况下应该是这样工作的-

左侧的
JList
应具有与右侧
JLabel
中显示的图片对应的名称

这些图片可以在项目根目录中的images文件夹中找到

无论出于何种原因,在左侧的
JList
中选择一个项目对右侧的
JLabel
没有影响

public class TextureChooser {

static Main main;

JSplitPane splitPane;
JList textureList;
JLabel texturePic;
String[] textures = {"grass", "stone", "water"};
ImageIcon ic = new ImageIcon("/Users/seanweber/Desktop/Textures/stone.jpg");

public TextureChooser(){
    textureList = new JList(textures);
    texturePic = new JLabel(ic);
    splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, textureList, texturePic);
}

//Listens to the list
public void valueChanged(ListSelectionEvent e) {
    JList list = (JList)e.getSource();
    updateLabel(textures[list.getSelectedIndex()]);
}

//Renders the selected image
protected void updateLabel (String name) {
    ImageIcon icon = createImageIcon("images/" + name + ".png");
    texturePic.setIcon(icon);
    if  (icon != null) {
        texturePic.setText(null);
    } else {
        texturePic.setText("Image not found");
    }
}

/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
   URL imgPath = main.getClass().getResource(path);
    if (imgPath != null) {
        return new ImageIcon(imgPath);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}
图像目录的路径如下所示

- ProjectRoot
  - images
    - stone
    - grass
    - water
我最初的假设是我检索的图像不正确


大部分代码直接取自Oracle网站上的一个示例。

您还没有在
纹理列表中添加
ListSelectionListener

textureList.addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        JList list = (JList) e.getSource();
        updateLabel(textures[list.getSelectedIndex()]);
    }
});

它是否打印过
找不到文件:…
?可能的原因是,图像不在应用程序类路径的上下文中,因此无法使用
class\getResource
加载。您是否尝试过使用
新图像图标(路径)相反?右侧的JLabel始终为空。我将尝试实施你的建议,尽管如果你不能告诉我我的IO技能相当弱PIf无法加载图像,这
System.err.println(“找不到文件:+path”)
将向控制台显示一条错误消息我将updateLabel()方法中的图像图标更改为一个外部路径,我知道它可以到达,但仍然没有从JLabel得到任何反应。我在任何情况下都没有犯过错误。哇。。。现在我只在这一行得到一个NPE
ImageIcon=createImageIcon(“images/”+name+“.png”)任何原因都不可能导致NPE的行,事实上,我能看到您得到NPE的唯一点是这里
URL imgPath=main.getClass().getResource(path),因为
main
null
。您可能应该使用
TextureChooser.class.getResource(path),但这可能需要您在路径前面加上前缀
/
,唯一的问题是我现在得到了错误
无法从类型对象对非静态方法getClass()进行静态引用
而不是
TextureChooser.getClass()
是的,这就成功了。我现在得到错误
“找不到文件:“+path
”,这肯定是朝着正确方向迈出的一步。