0

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

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,所以任何帮助都会得到帮助!!!提前致谢。

4

1 回答 1

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_statesfrom 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();
}
于 2013-02-19T04:41:48.733 回答