質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

Q&A

解決済

1回答

1997閲覧

Applet 画像の描画

MISHIRO

総合スコア27

Java

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

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0グッド

1クリップ

投稿2017/07/10 09:08

編集2017/07/11 02:48

Appletを使ってカードゲームを作成しています。
画像を出力しようとしているのですがうまくいきません。
画像も実行ファイルと同じ場所にインポートしました。
なぜうまく描画されないのかご教授お願い致します。

*web上の下記のようなURLの場合は問題なく動作します。
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSWS0cOORLbx3eZfRCNVNbSTF_fqkaZLZo_LOp522PQVYclrLtieA

java

1public class Deck_Information { 2private String playerChar ="im.jpg"; 3 4public String getPlayerChar(){ 5 return playerChar; 6 } 7} 8////////////////////////////////////////////////////////////////////// 9public abstract class AppletMain extends Applet implements MouseListener { 10 protected Image player; 11 protected Image back; 12 protected Graphics buffer; 13 14 public void init(){ 15 Deck_Information deck=new Deck_Information(); 16 player = getImage(getCodeBase(), deck.getPlayerChar()); 17 Dimension size = getSize(); 18 back = createImage(size.width, size.height); 19 buffer = back.getGraphics(); 20 } 21 public void paint(Graphics g){ 22 OutputScreen(buffer); 23 g.drawImage(back, 0, 0, this); 24 } 25 26 public void OutputScreen(Graphics g){ 27 g.drawImage(player,500,500, 150,200,this); 28 } 29}

イメージ説明

簡単なsampleコードを作ってみましたがうまく動きません。

java

1public class AppletMain extends Applet { 2 3 protected Image player; 4 5 // 一番最初にのみ実行される。 6 public void init() { 7 player = getImage(getCodeBase(), "im.jpg"); 8 } 9 10 // 表示させるメソッド 11 public void paint(Graphics g) { 12 g.drawLine(0, 0, 200, 200); 13 g.drawImage(player, 500, 500, 150, 200, this); 14 } 15}

イメージ説明

イメージ説明

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

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

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

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

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

mattn

2017/07/10 09:34

エラーが出ているのであればそれを書いて下さい。
MISHIRO

2017/07/11 01:58

返信遅くなってしまい申し訳ありません。 エラーなどはとくにでておらず描画されないだけの状態です
mattn

2017/07/11 02:02 編集

クラスを見る限り、abstract になっているのでこのクラスを継承した側で描画処理が行われているという事でしょうか?もしくは単に描画が抜けていたという話でしょうか?
MISHIRO

2017/07/11 02:07

このクラスを継承したクラスを実行しておりこのクラスではおもに描画をするものとなっています。
MISHIRO

2017/07/11 02:08

コードに抜けている部分がありましたので追加しておきました。
mattn

2017/07/11 02:20

実行ファイルとは class ファイルの事でしょうか? jar ファイルの事でしょうか? html ファイルの事でしょうか?
MISHIRO

2017/07/11 02:28

classファイルのことです
mattn

2017/07/11 02:31

であれば getCodeBase で良さそうですね。もし Windows であればコントロールパネルから Java の設定が変更できて、そこにコンソールを表示するの設定があります。コンソールを表示すると見れなかったエラーが見える事があります。 http://go-gyazo.appspot.com/a9644d73b2982375.png
MISHIRO

2017/07/11 02:38

コンソールというのはどの部分に当たるのでしょうか。自分はeclipseを使っているのでeclipseのコンソールでしょうか。もしそうであれば何も表示されませんでした。
MISHIRO

2017/07/11 02:39

試しに簡単なsampleコードを作ってみましたがそれでもうまく描画されませんでした。
mattn

2017/07/11 02:41

コンソールはブラウザでアプレットを表示した際に(上記の設定をしていれば)自動で表示されます。
MISHIRO

2017/07/11 02:44

ではeclipseで実行している場合は表示されないということですか?記述していただいたように自分のPCも設定しましたが何も起動しませんでした。
mattn

2017/07/11 02:46

eclipse で実行している場合は専用のアプレットビューワがそれを表示します。eclipse の出力に何か例外が出ていないでしょうか。
MISHIRO

2017/07/11 02:49

画像をアップしました。これはsampleコードを動かしているのですが特に例外は出ていないようです
mattn

2017/07/11 02:50

eclipse で実行されているのであれば、paint などでブレイクポイントを貼って実際に処理が通っているか確認出来ます。
MISHIRO

2017/07/11 02:55

処理は通っているようです。sampleコードもweb上の適当な画像のURLの場合は描画することができました。
mattn

2017/07/11 02:56

なんとなくですが、eclipse で実行すると im.jpg が .class と同じ位置にコピーされてないんじゃないかという気がします。プロジェクトのあるフォルダに target や classes というフォルダがあり、そこに .class のファイルが無いでしょうか?もしあって、そこと同じ位置に im.jpg があれば読み込まれるはずです。またアプレットを表示する際の getCodeBase を getDocumentBase にして試して貰えますか。
mattn

2017/07/11 02:57

要は im.jpg のパスが違っているかも、という事です。
MISHIRO

2017/07/11 03:00

classesフォルダの中にパッケージがありその中にAppletMain.classとim.jpgがありました。またこのように書き換えて実行しましたが特に変化は見られませんでした。player = getImage(getDocumentBase(), "im.jpg");
mattn

2017/07/11 03:09

解決した様でなにより。
MISHIRO

2017/07/11 03:10

KSwordOfHasteの回答の通りにパッケージ名を追加することによってうまく動作しました。試行錯誤していただきありがとうございました。
guest

回答1

0

ベストアンサー

描画していないからだと思います。イメージを生成(ロード)しただけでは画面には出ません。paintメソッドをオーバーライドしてGraphics#drawImageメソッドで画面へ描画してください。


追記:イメージのロードのしかたのところを見落としていました。

getCodeBase()はこのプロジェクトのコードベース(Javaのクラス階層でいうとデフォルトパッケージの場所)を示すので、画像がデフォルトパッケージにない場合はパッケージ名をつっくけてやらないと場所が正しく指定できません。

getImage(getCodeBase(), "practice/" + deck.getPlayerChar());

とするとロードできると思います。
あるいはコードベースを用いずに次のようにしてもよいでしょう。

getImage(getClass().getResource(deck.getPlayerChar()));

投稿2017/07/10 09:45

編集2017/07/11 03:03
KSwordOfHaste

総合スコア18394

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

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

MISHIRO

2017/07/11 02:03

返信が遅くなってしまい申し訳ありません。 こちらへの記述ミスです。 実際のコードには g.drawImage(player,500,500, 150,200,this); と記述しています。 修正しておきます。
KSwordOfHaste

2017/07/11 03:31 編集

回答に追記しました。 ちなみにdrawImage(player, 0, 0, 150, 200, this); とすべきと思います。500,500の場所に書くとオフスクリーンバッファの範囲外になってしまうと思いますが・・・ --- 失礼、「ちなみに・・・」の後は余計でした。Appletが充分大きければ問題ないので。
MISHIRO

2017/07/11 03:07

追記ありがとうございます。 パッケージ名を追加することによってうまく動作しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問