Java 使用字符串作为excel中的目录来更改JLabel中的图像

Java 使用字符串作为excel中的目录来更改JLabel中的图像,java,swing,jxl,embedded-resource,Java,Swing,Jxl,Embedded Resource,我觉得这是有史以来最准确的标题,准确地表达了我的需求。我正在用Java制作一个纸牌游戏,并已将所有纸牌统计数据加载到电子表格中。我使用JXL api读取电子表格,从电子表格中相应的单元格中获取每张卡的统计数据,并将它们存储在一个Deck对象中,在那里一切都非常好,但是当我尝试使用getImage()返回的字符串时,我不断得到一个空指针,我不知道为什么。我会发布所有我认为相关的内容,如果需要更多,请告诉我 第一部分来自装入电子表格并将数据附加到数据组对象的LoadCards类。注意:我在这里只做了

我觉得这是有史以来最准确的标题,准确地表达了我的需求。我正在用Java制作一个纸牌游戏,并已将所有纸牌统计数据加载到电子表格中。我使用JXL api读取电子表格,从电子表格中相应的单元格中获取每张卡的统计数据,并将它们存储在一个Deck对象中,在那里一切都非常好,但是当我尝试使用getImage()返回的字符串时,我不断得到一个空指针,我不知道为什么。我会发布所有我认为相关的内容,如果需要更多,请告诉我

第一部分来自装入电子表格并将数据附加到数据组对象的LoadCards类。注意:我在这里只做了一次测试,以确保它正常工作,而不是正常工作

public class LoadCards 
{
public Deck LoadCards()
{
    Workbook cardList  = null;
    try
    {
        cardList  = Workbook.getWorkbook(new File("C:\\DC Card Game\\src\\DCCardGame\\resources\\CardList.xls"));
    }
    catch (IOException e)
    {
        String message = "The file titled CardList.xls was not found.";
        String title = "File Not Found";
        JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
    } catch (BiffException ex) 
    {
        String message = "File must have an extension of .xls";
        String title = "Incompatible CardList File";
        JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
    }        
        Sheet typeSheet = cardList.getSheet(0);
        Sheet equipmentSheet = cardList.getSheet(1);
        String equipmentType = typeSheet.getCell(0,1).getContents();
        Deck testCard= new Deck(equipmentSheet.getCell(0, 1).getContents(),equipmentType,Integer.parseInt(equipmentSheet.getCell(2,1).getContents()),Integer.parseInt(equipmentSheet.getCell(3,1).getContents()),Integer.parseInt(equipmentSheet.getCell(4,1).getContents()),equipmentSheet.getCell(5,1).getContents());

        return testCard;
最后一行为Deck构造函数构建了一个对象,如下所示:

public Deck(String cardName, String type, int cost, int value, int power, String image)
{
    super();
}
牌组扩展了牌,所有合适的接受者/接受者都在牌组中

public Card(String cardName, String type, int cost, int value, int power, String image)
{
    this.cardName = cardName;
    this.type = type;
    this.cost = cost;        
    this.value = value;        
    this.power = power;
    this.image = image;
}
在我的form类中,这是我用来测试映像是否正常工作的代码(提示:它不正常)。它不断抛出NullPointerException

LoadCards test = new LoadCards();
test.LoadCards();
ImageIcon testImage = new ImageIcon(getClass().getResource(test.LoadCards().getImage()));
extraLineupSlot1.setIcon(testImage);

我需要弄清楚如何更正,以便从电子表格中调用表示目录的字符串,该目录存储在Deck/Card对象的image属性中,然后我可以调用该属性并更改与我创建的不同JLabel相关联的图标。

听起来您可以获取字符串列表,但在获取相应的命名资源时遇到了问题。在这种情况下,名称的
列表
列表
共享一个公共索引,后者充当存储在JAR中作为资源的图像缓存。方法
getImage(int index)
从缓存中返回现有图像,或通过
getResource()
加载图像以供将来参考。你可以比较一下你的方法。有关更多示例,请参见。

System.out.println告诉您什么?何时以什么方式使用?我不太明白。编辑:如果我执行System.out.println(test.LoadCards().getImage());我也得到一个空值。我将进行一些修补并以后台方式进行报告,放入一些
System.out.println
语句,以验证正在从XML文件读取值,是否正在设置值,以及当您尝试加载图像时,路径/名称是否为您想要的expect@MadProgrammer我试着加入一些System.out.println()在那里,我试图打印我试图使用的测试卡的所有属性,我得到的只是空值和零。这通常会告诉我它没有从excel文件中读取,但即使我修改对象以返回硬编码数据而不是xls文件的引用,它仍然给我0和null。然后我会看看你的读取方法,并仔细检查它是否真的像你预期的那样从excel中读取了值…这不是我想要的,但对新手来说仍然是非常有用的信息!非常感谢你!