前提・実現したいこと
モグラ叩きゲーム
発生している問題・エラーメッセージ
javaでネットの記事を見ながらモグラ叩きのゲームをつくっているのですが、記事の通りにソースコードを書いてもうまく動きません。
おそらく画像がうまく読み込めてないのだと思います。(同じフォルダ内に画像は入れてます) 対処法を教えてください。
補足MGPanelクラスとMGFrameクラスで構成されています。
エラーメッセージ
java.lang.Illegal ArgumentException input ==null!
該当のソースコード
(MGPanelクラス)
package MoguraTataki;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MGPanel extends JPanel{
private MouseAdapter mgma;
private int x=0;
private int y=0;
private BufferedImage[] imagePHs;
private int ph=0;
public MGPanel() { super(); try { this.setPreferredSize(new Dimension(800,600)); /*setSize(),setBounds()は、レイアウトマネージャーが使用されていない時に使用する。 ただし、レイアウトマネージャーを使用している場合は、setXXXSize()やsetPreferredSize()など*/ this.setLayout(null); mgma=new MGMouseAdapter(); this.addMouseListener(mgma); this.addMouseMotionListener(mgma); //ピコピコハンマーを読み込む imagePHs=new BufferedImage[2]; InputStream is0=this.getClass().getResourceAsStream("PH00.gif");//getclassはobjectクラスのメソッドでclassオブジェクトを呼び出す imagePHs[0]=ImageIO.read(is0); //ImageIOクラスの関数(bufferedImageに変換) is0.close(); InputStream is1=this.getClass().getResourceAsStream("PH01.gif"); imagePHs[1]=ImageIO.read(is1); is1.close(); }catch(Exception ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(this, "ERROR : " + ex.toString());//https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JOptionPane.htm } }
public void paint(Graphics g) {//paintは自動的に呼び出される
g.setColor(Color.BLACK);
g.fillRect(0, 0, 800, 600);
//ピコピコハンマーを描写する
g.drawImage(imagePHs[ph], x, y, 100, 100, this);
}
public class MGMouseAdapter extends MouseAdapter{
public void mousePressed(MouseEvent me) { ph=1; //場所を記憶 x=me.getX(); y=me.getY(); repaint(); } public void mouseReleased(MouseEvent me) { ph=0; //場所を記憶 x=me.getX(); y=me.getY(); repaint(); } public void mouseMoved(MouseEvent me) { //場所を記憶 x=me.getX(); y=me.getY(); repaint(); } public void mouseDragged(MouseEvent me) { //場所を記憶 x=me.getX(); y=me.getY(); repaint(); }
}// end MouseAdapter
}
java
1MGFrameクラス 2 3package MoguraTataki; 4 5import java.awt.BorderLayout; 6 7import javax.swing.JFrame; 8 9//フレームクラス 10public class MGFrame extends JFrame{ 11 12 private MGPanel panel; 13 14 public static void main(String[] args) { 15 16 MGFrame mg01=new MGFrame(); 17 18 } 19//コンストラクタ 20 public MGFrame() { 21 super(); 22 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 23 this.setLayout(new BorderLayout()); 24 panel=new MGPanel(); 25 this.setContentPane(panel); 26 this.setVisible(true); 27 this.pack(); 28 29 } 30 31 32} 33 34
試したこと
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー