我一直得到一个返回null的字符串...

时间:2013-02-19 04:30:54

标签: java arrays image imageicon

我真的不知道我做错了什么。我正在制作一个状态游戏,所以我可以帮助人们学习但是当我运行它有效但它不会将图像返回到屏幕上。这是代码的主要部分,我有我的数组...

public void checkCorrectValue(String guess){
    if(guess.equalsIgnoreCase(current_state)){
        correct_value = true;
    }else{
        correct_value = false;
    }
}
public void setRandomState(){
    r = new Random();
    int i;
    i = r.nextInt(50);
    System.out.println(i);
    current_state = states[i];
    System.out.println(current_state + " was randomly selected");
}
public String getCurrentState(){
    return current_state;
}
public boolean isStateCorrect(){
    return correct_value;
}

我添加了一个名为states的数组,并用所有状态填充它。它确实成功输出正确的状态,所以我知道这是有效的。这是我的面板代码......

    States_Images us_img;
USA_States us_state;

public Menu(){
    setLayout(null);
    setBackground(Color.WHITE);

    us_img = new States_Images();
    us_state = new USA_States();

    us_state.setRandomState();
    System.out.println(us_state.getCurrentState());

    JLabel l = new JLabel();
    l.setIcon(us_img.getCurrentStateImage());
    l.setBounds(0,0,500,500);
    add(l);
}

所有这一切都是设置我的面板的东西,然后尝试通过首先调用setRandomState()来设置随机状态放置图像,它确实在那里正确放置。但是当运行us_img.getCurrentStateImage()时......

    private ImageIcon currentstate_image;
private String current_state;
USA_States us_states;

public States_Images(){
    us_states = new USA_States();
}

public ImageIcon getCurrentStateImage(){
    setStateName();
    currentstate_image = new ImageIcon("graphics\\" + current_state + ".png");
    System.out.println(current_state + " image loaded");
    return currentstate_image;
}
private void setStateName(){
    current_state = us_states.getCurrentState();
}

打印出“空图像加载”。然后我的画面上没有任何显示。我真的不知道我做错了什么,因为我以前做过这样的事情。我知道这是基本的java所以任何帮助都会真正被appriciated !!!提前谢谢。

1 个答案:

答案 0 :(得分:0)

在创建ImageIcon的新实例时,您似乎没有传递有效的文件名。

currentstate_image = new ImageIcon("graphics\\" + current_state + ".png");

根据ImageIcon javadoc,您需要传递要创建的ImageIcon的文件名(路径)。

您可能希望确保该文件实际存在于./graphics/{current_state}.png

此外,javadoc说尽可能使用正斜杠。

修改

System.out.println(current_state + " image loaded");

您是否已检查此时current_state是否为空? 如果您收到“空图像加载”,则表示current_state变量为null。检查您的us_states.getCurrentState();方法。

发布USA_States课程也可能有所帮助。

如果您尝试使用上述us_states类中的相同Menu实例, 您必须将us_states从Menu类传递到States_Images类。

这是修改后的代码: 菜单类:

public Menu(){
    setLayout(null);
    setBackground(Color.WHITE);

    us_state = new USA_States();
    us_state.setRandomState();

    us_img = new States_Images(us_state); //Pass us_state to States_Images
    System.out.println(us_state.getCurrentState());

    JLabel l = new JLabel();
    l.setIcon(us_img.getCurrentStateImage());
    l.setBounds(0,0,500,500);
    add(l);
}

States_Images类:

private ImageIcon currentstate_image;
private String current_state;
USA_States us_states;

public States_Images(USA_States us_state){
    this.us_states = us_state
}

public ImageIcon getCurrentStateImage(){
    setStateName();
    currentstate_image = new ImageIcon("graphics\\" + current_state + ".png");
    System.out.println(current_state + " image loaded");
    return currentstate_image;
}
private void setStateName(){
    current_state = us_states.getCurrentState();
}