🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

1686閲覧

java BufferedImage に画像を取り込むやり方について

etcetera

総合スコア24

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/02/06 11:38

前提・実現したいこと

モグラ叩きゲーム

発生している問題・エラーメッセージ

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/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiketa

2021/02/06 15:15 編集

> (同じフォルダ内に画像は入れてます) とはありますが、実際のファイルのレイアウトがわからないのでなんとも言えませんけど。 メッセージを見た感じ `this.getClass().getResourceAsStream("PH00.gif");`がnullを返しているのでしょう。 PH00.gifファイルを、MGPanel.javaファイルと同じ場所、ではなく、MGPanel.classファイルと同じ場所に置いてありますか?
etcetera

2021/02/06 15:58

あっ、パッケージファイルの中に入れていたのですが、MGPanel.javaの中に入れると無事実行できました!ありがとうございました!
shiketa

2021/02/07 12:44

後学のためにおしえてください。 > etceteraさん > パッケージファイルの中に入れていたのですが... 「パッケージファイル」ってなんですか?
etcetera

2021/02/08 12:05

プロジェクト ∟ src ←ここの段に入れていたのを ∟ パッケージ ←ここに入れて解決しました ∟ javaファイル
guest

回答1

0

自己解決

MGPanel.javaと同じ場所に画像を入れることで解決できました。ベストアンサーの選び方がわからないので自己解決にさせていただきます。

投稿2021/02/07 07:08

etcetera

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問