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この時点で null でないかどうかを確認しましたか? 「null image loaded」を取得している場合は、current_state変数がであることを意味しますnull。方法を確認してくださいus_states.getCurrentState();

USA_Statesクラスを投稿することも役立つかもしれません。

上記のクラスから同じus_statesインスタンスを使用しようとしている場合は、 from Menu クラスをクラスMenuに渡す必要があります。 us_statesStates_Images

変更されたコードは次のとおりです。 Menu クラス:

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 に答える