-2

私はもともとChillaxから始めましたが、締め切り間際に非常に多くの問題に遭遇した後、より慣れ親しんだIDEであるNetBeansに戻り、より基本的な「小惑星」タイプのゲームにアプローチを変更しました。

  • NBのzipファイル: http: //ge.tt/4T5tBFT/v/0 ?c
  • テキスト:git clone git://gist.github.com/4248746.git
  • 埋め込み?:

NetBeansでは、次のようになります。

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at gayme.Craft.<init>(Craft.java:27)
at gayme.Board.<init>(Board.java:54)
at gayme.Gayme.<init>(Gayme.java:9)
at gayme.Gayme.main(Gayme.java:19)
Java Result: 1

出典:(クラフト26-34)

    public Craft() {
    ImageIcon ii = new ImageIcon(this.getClass().getResource("craft.png"));
    image = ii.getImage();
    width = image.getWidth(null);
    height = image.getHeight(null);
    missiles = new ArrayList();
    visible = true;
    x = 40;
    y = 60;}

(ボード54)

    craft = new Craft();

(Gayme 9)

    add(new Board());

(Gayme 19)

   new Gayme();

私は本当に解決する必要のある問題を抱えており、睡眠不足の脳はそれぞれの問題を考えています。どちらのゲームでもお気軽にお手伝いしてください。どうもありがとう!

4

1 に答える 1

5

3つの方法があります:

以下にあるJarファイルとリソースの操作について覚えておくべきいくつかのこと:

  • JVMでは大文字と小文字が区別されるため、ファイル名とパッケージ名では大文字と小文字が区別されます。つまり、メインクラスはmypackage内にあり、 myPackAgeのようなパスで抽出することはできません。

  • 任意の期間'。' パッケージ名内にあるものは「/」に置き換える必要があります

  • 名前が「/」(「\ u002f」)で始まる場合、リソースの絶対名は「/」に続く名前の部分です。クラスを実行するとき、リソース名は/で始まり、リソースは異なるパッケージにあります。

私の好みの方法を使用してそれをテストしてみましょう。その方法でgetResource(..)は、リソースのURLが返されます。

org.testmy.resourcesの2つのパッケージでプロジェクトを作成します。

ここに画像の説明を入力してください

ご覧のとおり、私の画像はmy.resourcesにあり、保持しているMainクラスmain(..)org.testにあります。

Main.java:

import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class Main {

    public static final String RES_PATH = "/my/resources";//as you can see we add / to the begining of the name and replace all periods with /
    public static final String FILENAME = "Test.jpg";//the case sensitive file name

    /*
     * This is our method which will use getResource to extarct a BufferedImage
     */
    public BufferedImage extractImageWithResource(String name) throws Exception {

        BufferedImage img = ImageIO.read(this.getClass().getResource(name));

        if (img == null) {
            throw new Exception("Input==null");
        } else {
            return img;
        }
    }

    public static void main(String[] args) {
        try {
            BufferedImage img = new Main().extractImageWithResource(RES_PATH + "/" + FILENAME);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
}

の名前をいじっRES_PATHたりFILENAME、実際のファイルに適切な変更を加えなかったりすると、例外が発生します(パスに注意する必要があることを示しています)

アップデート:

あなたが持っているあなたの特定の問題のために:

ImageIcon ii = new ImageIcon(this.getClass().getResource("craft.png"));

そのはず:

ImageIcon ii = new ImageIcon(this.getClass().getResource("/resources/craft.png"));

およびその他のAlienクラスも変更する必要があります。

于 2012-12-10T08:04:28.977 に答える