Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

MyJPanelについて

先日倉庫番について投稿した者です。なんとかプログラムを完成させたのですが、コンパイルがうまくいきませんでした。

どうやらMyJPanelとwidthの部分でエラーが出ているのですが・・・以下widthまでのプログラム

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Image;


public class souko extends JFrame{

    public souko(){
        setSize(500, 500);        //最初のフレームサイズ
        setTitle("倉庫番");    //タイトル
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        //コンテナを取得してパネルを貼る
        MyJPanel    myJPanel= new MyJPanel();
        Container c = getContentPane();    //コンテナの取得
        c.add(myJPanel);        //パネルを貼る
        setVisible(true);
    }

    public static void main(String[] args){
        new soukoban();
    }

    public class MyJPanel extends JPanel implements ActionListener, KeyListener{
        final int col = 6;//横マスの数
        final int row = 6;//縦マスの数
        final int N = 2;//箱の数
        Dimension d;
        Timer timer;
        int [][] field ={
                {0,0,0,0,0,0},
                {0,2,1,1,1,0},
                {0,1,1,1,1,0},
                {0,1,1,1,1,0},
                {0,2,1,1,1,0},
                {0,0,0,0,0,0}
                };
        //0壁  1空白  2ゴール 3箱 4自分

        int my_x = 2,my_y = 2, vx = 0, vy = 0;
        int[] box_x={3,3};
        int[] box_y={1,4};

        Image[] image = new Image[5];
        int width[],height[];

        public MyJPanel(){
            for(int n=0; n<5; n++){
                ImageIcon icon = new ImageIcon("image"+ n +".GIF");
                image[n] = icon.getImage();
                width[n]  = image[n].getWidth(this);
                height[n] = image[n].getHeight(this);

14

回答

4959

閲覧

14件の回答

評価

0

書き忘れました。このようなエラーが出ます。
Exception in thread "main" java.lang.NullPointerException
    at soukoban$MyJPanel.<init>(soukoban.java:52)
    at soukoban.<init>(soukoban.java:15)
    at souko.main(souko.java:22)

評価

0

>コンパイルがうまくいきませんでした。

じゃ、実行時エラーじゃなくて、
コンパイル時エラーを書いてよ。

評価

0

>Exception in thread "main" java.lang.NullPointerException
>at soukoban$MyJPanel.<init>(soukoban.java:52)
>at soukoban.<init>(soukoban.java:15)
>at souko.main(souko.java:22)

上のエラーメッセージはスタックトレースっていうもので
実行時に出るメッセージです。
コンパイルが通ってなかったら実行出来ないと思うので
実はコンパイルは出来てるんじゃないですか?
コンパイルエラーがあっても解釈可能なコードは実行できるような
特殊な環境で作業してるんですか?

soukoban.javaの52行目でエラーが出てる。
察するにこのソースsoukoban.javaじゃなくてsouko.javaですよね?
エスパーじゃないので質問には答えられません。
まず解決方法じゃなくエラーの読み方を覚えたほうがいいんじゃないかな。

それともしこのソースがsoukoban.javaだったとしても52行目ってどこですか?
回答者が数えろって事ですか?
import文から数えればいいんですか?
実はpackage宣言があって行数がずれたりしないですか?

僕以外のエスパーが答えてくれるかもしれないけど
僕にはむり、質問の見直しをお願いします。

評価

0

すみませんでした。
バックアップ用に2つ作ってあったので、souko soukoban共に内容は同じものです。

評価

0

それじゃほんのちょっぴりしか情報の追加になってないよ、よく読んで。
それとも問題は解決されたんでしょうか?

まず片方のファイルは全然関係ない場所、
デスクトップかなんかに移動させてからコンパイルなり実行して
回答者が回答できるような質問を書き直してください。

評価

0

連投失礼します。自分も初心者なので、よく分かっていませんでした。その点に関しては失礼しました。
的確な質問をしたいと思います。
「コンパイルは成功したようなのですが、実行時にエラーが出ました。」

Exception in thread "main" java.lang.NullPointerException
    at soukoban$MyJPanel.<init>(soukoban.java:52)
    at soukoban.<init>(soukoban.java:15)
    at souko.main(souko.java:22)

このエラーの行は
MyJPanel    myJPanel= new MyJPanel();
new soukoban();
width[n]  = image[n].getWidth(this);

の部分なのですが、どうしてエラーが出たのか良く分かりません。このエラーの解消法についてアドバイスをお願いします。

評価

0

俺のレスはスルーか。(′・ω・`)

ゆきお氏も指摘してるが、
ちゃんとキャッチボールしようよ。

評価

0

Exception in thread "main" java.lang.NullPointerException
    at souko$MyJPanel.<init>(soukoban.java:52)
at souko.<init>(soukoban.java:15)
    at souko.<init>(soukoban.java:15)

22行目のsoukoban をsoukoに直しても結果は同じでした。

評価

0

初心者っつっても、今は課題を提出する季節でしょ。
今まで何をしていたのやら。

さて。

NullPointerExceptionは、
変数を宣言しているだけで、
初期値を設定していなかったり、
インスタンスを生成していないのにNullのまま、
いきなり使用している場合に発生するエラーです。

評価

0

>22行目のsoukoban をsoukoに直しても結果は同じでした。

そんなことして、自分がどんな操作をしているのか、
きちんと説明できる?
変更前と変更後、何がどう違うのか、説明できるのか?
自分で混乱のネタを増やしてんじゃないよ。

評価

0

と、こっちがとちったか。
名前だけ変えたバックアップを作って、
バックアップの方を投稿に使ったんだろうな。

今回の修正で「名前だけ変えたバックアップが、
正しいカタチになった」ってところかね。

面倒くさいのは変わらないが。

評価

0

実行エラーが解消されました。ありがとうございました。

評価

0

何がどう解消したのか、
何が間違っててどう直したら解消したのか書くべきなんじゃない?

最終的に僕の回答はそんな役に立ってないかもしれないけど
これらが成されないなら次からは完全スルーさせてもらいますね。

評価

0

よくあることだけど、解答する側が欲しいのは、お礼じゃなくて
フィードバックなんだよね。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。