イライラ棒アプリで謎のエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たこ焼き

イライラ棒アプリで謎のエラー

#1

投稿記事 by たこ焼き » 13年前

Androidプログラミングの館のイライラ棒アプリをs2.6までコピペで作らせていただきました。
しかし、それでできたアプリを終了させるときに8割くらいの確率でエラーのダイアログが表示されてしまいます。
原因もわからず困っております。
解決法をどうかお教え願います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: イライラ棒アプリで謎のエラー

#2

投稿記事 by softya(ソフト屋) » 13年前

同じ内容で複数のトピックを立てるのはご遠慮ください。
私はandroidに詳しくないのですが、「8割くらいの確率でエラーのダイアログが表示されてしまいます」の詳細や開発環境のバージョン、開発機材などの情報を書かないと答えられる人も答えられないと思いますのでお願いします。
これだけだと実機出てているのかandroidシミュレータで出ている問題なのかもさえも良く分かりませんので。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: イライラ棒アプリで謎のエラー

#3

投稿記事 by Dixq (管理人) » 13年前

まず、強制終了したならば、Logcatにエラーメッセージがでているはずです。
赤字で出ているものがエラーメッセージです。
その内容を教えて下さい。

また、章ごとにプロジェクトがダウンロードできるようになっていますが、ダウンロードしたプロジェクトで実行するとどうなりますか?

たこ焼き

Re: イライラ棒アプリで謎のエラー

#4

投稿記事 by たこ焼き » 13年前

同じような内容のトピックが以前にもあったと知らず失礼しました。

今回の問題はAndroid4.0.4の実機で発生しました。
LogCatを見たところ

FATAL EXCEPTION:Thread-1987
java.lang.NullPointerException
at (プロジェクト名).GameMgr.onDraw(GameMgr.java:45)
at (プロジェクト名).GameSurfaceView.onDraw(GameSurfaceView.java:45)
at (プロジェクト名).GameSurfaceView.run(GameSurfaceView.java:38)
at java.lang.Thread.run(Thread.java:856)

と表示されていました。
s2.6のコードをそのままコピーしました。
どうかよろしくお願いいたします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: イライラ棒アプリで謎のエラー

#5

投稿記事 by softya(ソフト屋) » 13年前

いえ、たこ焼きさんが同じトピックを20分差で2つ作られていたのです。

あと、Dixq (管理人)さんの言われる
>また、章ごとにプロジェクトがダウンロードできるようになっていますが、ダウンロードしたプロジェクトで実行するとどうなりますか?
をまず試してみてください。
それと開発環境のバージョンが書かれておりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: イライラ棒アプリで謎のエラー

#6

投稿記事 by Dixq (管理人) » 13年前

配布しているソースコードではGameMgrに45行も無いです。
どこか紹介しているコードと違うのではないでしょうか?

GameMgr.javaの45行目でNullPointerExceptionが起きているなら、そこでNullになる原因を探ってみてはどうでしょう。

分からなければ、配布しているソースコードと比較してみてください。
ソースコードの比較の方法はこちらを参考にどうぞ
http://dixq.net/rp/winmerge.html

たこ焼き

Re: イライラ棒アプリで謎のエラー

#7

投稿記事 by たこ焼き » 13年前

返信遅くなってすみません。

s2.6からダウンロードしたプロジェクトを実行した結果、同じようなエラーが出ました。
開発環境はeclipseのversion20.0.3.v201208082019-427395です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: イライラ棒アプリで謎のエラー

#8

投稿記事 by softya(ソフト屋) » 13年前

たこ焼き さんが書きました:返信遅くなってすみません。

s2.6からダウンロードしたプロジェクトを実行した結果、同じようなエラーが出ました。
開発環境はeclipseのversion20.0.3.v201208082019-427395です。
ダウンロードしたものでエラーが出た行番号を教えて下さい。
それとeclipseではなくversion20.0.3ってADTのバージョンですよね?

>GameMgr.javaの45行目でNullPointerExceptionが起きているなら、そこでNullになる原因を探ってみてはどうでしょう。

は調べられたのですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: イライラ棒アプリで謎のエラー

#9

投稿記事 by Dixq (管理人) » 13年前

こちらで確認したところ、確かに発生しますね。

どうもアプリを終了すると、Canvasが使えなくなった後でSurfaceDestroyedが呼ばれるようです。
つまりSurfaceDestroyedが呼ばれる前に使えなくなったCanvasは使わないようにしなければならないようです。
そこで、Canvasが取得できなかったときはスキップするように、以下のように対処してみましたが如何でしょうか。

GameSurfaceView#

コード:

	private void onDraw(SurfaceHolder holder) {
		Canvas c = holder.lockCanvas();
		if(c==null){
			return;
		}
		_gameMgr.onDraw(c);
		holder.unlockCanvasAndPost(c);
	}

たこ焼き

Re: イライラ棒アプリで謎のエラー

#10

投稿記事 by たこ焼き » 13年前

Canvasのところを修正した結果エラーが出なくなりました。
どうもありがとうございました。

これからもAndroidプログラミングを続けていきたいと思っていますのでよろしくお願いいたします。

閉鎖

“C言語何でも質問掲示板” へ戻る