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得到任何反应。我在任何情况下都没有犯过错误。哇。。。现在我只在这一行得到一个NPEImageIcon=createImageIcon(“images/”+name+“.png”)代码>任何原因都不可能导致NPE的行,事实上,我能看到您得到NPE的唯一点是这里URL imgPath=main.getClass().getResource(path)代码>,因为main
为null
。您可能应该使用TextureChooser.class.getResource(path)代码>,但这可能需要您在路径前面加上前缀/
,唯一的问题是我现在得到了错误无法从类型对象对非静态方法getClass()进行静态引用
而不是TextureChooser.getClass()
是的,这就成功了。我现在得到错误“找不到文件:“+path
”,这肯定是朝着正确方向迈出的一步。