Javaの質問で以下のプログラムをコマンドプロントでコンパイルはできるのですが
実行した時に以下のエラーが出ます
どのようにしたらしっかりと実行できるようになるでしょうか?
変更したらいい部分などを教えてください!
回答よろしくお願いします
エラー文 Exception in thread "main" java.lang.NullPointerException at MyFrame.suraimu(MyFrame.java:175) at MyFrame.addMonster(MyFrame.java:128) at MyFrame.createBasePanel(MyFrame.java:93) at MyFrame.<init>(MyFrame.java:35) at part18.main(part18.java:8)
JAVA
1import javax.swing.JFrame; 2import javax.swing.JLabel; 3import java.awt.Color; 4import java.awt.Font; 5import java.awt.Image; 6import javax.swing.JPanel; 7import java.io.File; 8import java.awt.image.BufferedImage; 9import javax.imageio.ImageIO; 10import javax.swing.ImageIcon; 11 12public class MyFrame extends JFrame 13{ 14 15 JLabel jlMsg; 16 JPanel jpChild2; 17 BufferedImage ba1; 18 BufferedImage ba2; 19 BufferedImage ba3; 20 21 public MyFrame()throws java.io.IOException//コンストラクタ化 22 { 23 24 File file1=new File("[Monster]Bat_pochi.jpg");//コウモリのファイル読み込み 25 ba1=ImageIO.read(file1);//コウモリ画像全体を読み込む 26 27 File file2=new File("[Monster]Goblin1_tapis.jpg");//ゴブリンのファイル読み込み 28 ba2=ImageIO.read(file2);//ゴブリン画像全体を読み込む 29 30 File file3=new File("[Monster]Slime1_pochi.jpg");//スライムのファイル読み込み 31 ba3=ImageIO.read(file3);//スライム画像全体を読み込む 32 33 setBounds(20,40,940,540);//フレームサイズ変更 34 setDefaultCloseOperation(EXIT_ON_CLOSE);//×ボタン有効化 35 add(createBasePanel());//親パネル作成しフレームに貼り付け 36 setVisible(true);//フレームを表示状態へ 37 38 enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK);//キー入力有効化 39 40 } 41 42 protected void processKeyEvent(java.awt.event.KeyEvent e) 43 { 44 if(e.getID()==java.awt.event.KeyEvent.KEY_PRESSED){ 45 System.out.println("キー"+e.getKeyCode()+"が押されました"); 46 if(e.getKeyCode()==java.awt.event.KeyEvent.VK_1){ 47 jlMsg.setText("魔王と戦い勝利しました"); 48 } 49 if(e.getKeyCode()==java.awt.event.KeyEvent.VK_2){ 50 jlMsg.setText("修行して強くなった"); 51 } 52 if(e.getKeyCode()==java.awt.event.KeyEvent.VK_3){ 53 jlMsg.setText("宿屋に泊まった"); 54 } 55 } 56 } 57 58 //基盤パネルを作成 59 JPanel createBasePanel()throws java.io.IOException 60 { 61 JPanel jp=createPanel(Color.BLACK); 62 63 //フォントを作成 64 Font f=new Font(Font.MONOSPACED,Font.BOLD,40); 65 66 67 //レイアウト1行目 68 //パネルを作成し親パネルに貼り付け 69 JPanel jpChild=createPanel(Color.BLUE);//小パネル作成 70 jp.add(jpChild);//親パネルにパネル追加 71 72 //ラベルを作成し子パネルに貼り付け 73 JLabel jlChild=new JLabel(player.getStatusString());//文字列作成 74 jlChild.setFont(f);//文字サイズ変更 75 jlChild.setForeground(Color.WHITE);//文字色設定 76 jpChild.add(jlChild);//子パネルに文字追加 77 78 79 //レイアウト2行目 80 81 //可変表示パネル 82 JPanel jpChild2=createPanel(Color.CYAN);//小パネル作成 83 jp.add(jpChild2);//親パネルにパネル追加 84 /* 85 //選択肢をパネルに貼り付け 86 JLabel jlMain=new JLabel( 87 "<html>1.すぐに魔王を倒しに行く<br>2.修行する<br>3.宿屋に泊まる" 88 ); 89 jlMain.setFont(f); 90 jpChild2.add(jlMain); 91 */ 92 93 addMonster(); 94 95 //レイアウト3行目 96 //ラベルを作成し親パネルに貼り付け 97 jlMsg=new JLabel("魔王が世界を滅ぼそうとしています");//文字入力 98 jlMsg.setFont(f);//文字サイズ変更 99 jlMsg.setForeground(new Color(255,128,0));//文字色設定 100 jp.add(jlMsg);//ウィンドウに文字追加 101 102 System.out.println("プログラムを全て読み込みましました!");//読み込み確認 103 return(jp); 104 105 } 106 107 108 109 //ここより以降は関数作成コード 110 111 //パネルを作成し背景色を設定する関数 112 JPanel createPanel(Color c) 113 { 114 JPanel jp=new JPanel(); 115 jp.setBackground(c); 116 return(jp); 117 } 118 119 120 void addMonster() 121 { 122 123 int cw=32;//セルサイズ/幅 124 int ch=48;//セルサイズ・高さ 125 int sw=32*4;//表示サイズ・幅 126 int sh=48*4;//表示サイズ・高さ 127 128 suraimu(jpChild2,ba3,0,0,cw,ch,sw,sh);//スライム表示の関数を呼び出して村人の正面の画像を表示する 129 koomori(jpChild2,ba1,0,0,cw,ch,sw,sh);//コウモリ表示の関数を呼び出して村人の正面の画像を表示する 130 goburinn(jpChild2,ba2,0,0,cw,ch,sw,sh);//ゴブリン表示の関数を呼び出して村人の正面の画像を表示する 131 } 132 /* 133 134 @param jpChild2 表示対象パネル 135 @param ba0,1,2,3 画像全体 136 @param x 表示する座標X 137 @param y 表示する座標Y 138 @param cw セルの大きさ・幅 139 @param ch セルの大きさ・高さ 140 @param sw 表示サイズ・幅 141 @param sh 表示サイズ・高さ 142 143 */ 144 145 void koomori(JPanel jpChild2,BufferedImage ba1,int x,int y,int cw,int ch,int sw,int sh)//コウモリ表示関数作成 146 { 147 BufferedImage bs1=ba1.getSubimage(cw*x,ch*y,cw,ch); 148 //画像サイズ192*192に変更した画像の左端に切り取り 149 Image im=bs1.getScaledInstance(sw,sh,Image.SCALE_DEFAULT); 150 ImageIcon ii=new ImageIcon(im);//JLabelように型変換 151 JLabel jlImage=new JLabel(ii);//画像部品を作成 152 jlImage.setSize(sw,sh);//画像部品の座標とサイズ変更 153 jpChild2.add(jlImage);//親パネルに画像貼り付け 154 } 155 156 void goburinn(JPanel jpChild2,BufferedImage ba2,int x,int y,int cw,int ch,int sw,int sh)//ゴブリン表示関数作成 157 { 158 BufferedImage bs2=ba2.getSubimage(cw*x,ch*y,cw,ch); 159 //画像サイズ192*192に変更した画像の左端に切り取り 160 Image im=bs2.getScaledInstance(sw,sh,Image.SCALE_DEFAULT); 161 ImageIcon ii=new ImageIcon(im);//JLabelように型変換 162 JLabel jlImage=new JLabel(ii);//画像部品を作成 163 jlImage.setSize(sw,sh);//画像部品の座標とサイズ変更 164 jpChild2.add(jlImage);//親パネルに画像貼り付け 165 } 166 167 void suraimu(JPanel jpChild2,BufferedImage ba3,int x,int y,int cw,int ch,int sw,int sh)//スライム表示関数作成 168 { 169 BufferedImage bs3=ba3.getSubimage(cw*x,ch*y,cw,ch); 170 //画像サイズ192*192に変更した画像の左端に切り取り 171 Image im=bs3.getScaledInstance(sw,sh,Image.SCALE_DEFAULT); 172 ImageIcon ii=new ImageIcon(im);//JLabelように型変換 173 JLabel jlImage=new JLabel(ii);//画像部品を作成 174 jlImage.setSize(sw,sh);//画像部品の座標とサイズ変更 175 jpChild2.add(jlImage);//親パネルに画像貼り付け 176 } 177 178}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/05 14:39
2017/08/05 14:47 編集
2017/08/05 14:49
2017/08/05 14:53
2017/08/05 14:55
2017/08/05 15:00
2017/08/05 15:06 編集
2017/08/05 15:08
2017/08/05 15:14
2017/08/05 15:22
2017/08/05 16:12