0

私はすでに変数を持っています

Image spriteImage;

コードの後半で、それが何であるかを述べます

Image spriteImage = new Image("content/man.png");

このコードは私の Slick2D アプリケーションをクラッシュさせます。違いは何ですか

Image spriteImage = new Image("content/man.png");

spriteImage = new Image("content/man.png");

(これは実際に機能します)

4

4 に答える 4

3

「クラッシュ」が「コンパイルされない」ことを意味する場合、その理由はImage spriteImage、スコープ内で (または他の型と名前の組み合わせを) 宣言するたびに、新しい変数を定義しているためです。すでに同様のステートメントがある場合、同じ変数を 2 回再宣言したと言ってコンパイルに失敗します。

ステートメント:

Image spriteImage = new Image("content/man.png");

という新しい変数を宣言しますspriteImageが、ステートメントは次のとおりです。

spriteImage = new Image("content/man.png");

spriteImageは、既に存在する変数の値を に設定していますnew Image(...)

于 2013-10-07T20:57:04.753 に答える
0

変数の再宣言。spriteImage はすでに画像であるため、画像として宣言することはできません。別の解決策は、次を使用することです。

Image spriteImage = new Image("content/man.png");

このステートメントで上記を宣言しないでください。

Image spriteImage;

これも許容され、spriteImage を 2 回宣言しません。

于 2013-10-07T20:59:46.017 に答える
0

変数をシャドウイングしているようです。

メソッドの外にある場合

Image spriteImage

そして、あなたが行うメソッドの中で

Image spriteImage = (...);

ローカル変数を割り当てていますspriteImage

もしあなたがそうするなら

spriteImage = (...);

次に、以前に宣言されたspriteImage(おそらくインスタンス変数)を割り当てています

ローカルのものを割り当てるだけで、インスタンス1をそのままにしておきます。nullそれを使用しようとすると、openGLがクラッシュする原因となるnullポインターがあると思います。

于 2013-10-07T20:58:20.223 に答える
0

既にImage spriteImageを宣言していますが、初期化していません。

    spriteImage = new Image("content/man.png");

上記は初期化していますが、

    Image spriteImage = new Image("content/man.png");

ローカルの Image 変数を宣言しています。これは、他の変数をシャドーイングしています。

于 2013-10-07T20:58:23.990 に答える