ページ 1 / 1
イライラ棒アプリで謎のエラー
Posted: 2012年11月04日(日) 22:12
by たこ焼き
Androidプログラミングの館のイライラ棒アプリをs2.6までコピペで作らせていただきました。
しかし、それでできたアプリを終了させるときに8割くらいの確率でエラーのダイアログが表示されてしまいます。
原因もわからず困っております。
解決法をどうかお教え願います。
Re: イライラ棒アプリで謎のエラー
Posted: 2012年11月04日(日) 23:18
by softya(ソフト屋)
同じ内容で複数のトピックを立てるのはご遠慮ください。
私はandroidに詳しくないのですが、「8割くらいの確率でエラーのダイアログが表示されてしまいます」の詳細や開発環境のバージョン、開発機材などの情報を書かないと答えられる人も答えられないと思いますのでお願いします。
これだけだと実機出てているのかandroidシミュレータで出ている問題なのかもさえも良く分かりませんので。
Re: イライラ棒アプリで謎のエラー
Posted: 2012年11月05日(月) 00:57
by Dixq (管理人)
まず、強制終了したならば、Logcatにエラーメッセージがでているはずです。
赤字で出ているものがエラーメッセージです。
その内容を教えて下さい。
また、章ごとにプロジェクトがダウンロードできるようになっていますが、ダウンロードしたプロジェクトで実行するとどうなりますか?
Re: イライラ棒アプリで謎のエラー
Posted: 2012年11月05日(月) 22:52
by たこ焼き
同じような内容のトピックが以前にもあったと知らず失礼しました。
今回の問題は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のコードをそのままコピーしました。
どうかよろしくお願いいたします。
Re: イライラ棒アプリで謎のエラー
Posted: 2012年11月05日(月) 22:55
by softya(ソフト屋)
いえ、たこ焼きさんが同じトピックを20分差で2つ作られていたのです。
あと、Dixq (管理人)さんの言われる
>また、章ごとにプロジェクトがダウンロードできるようになっていますが、ダウンロードしたプロジェクトで実行するとどうなりますか?
をまず試してみてください。
それと開発環境のバージョンが書かれておりません。
Re: イライラ棒アプリで謎のエラー
Posted: 2012年11月06日(火) 00:12
by Dixq (管理人)
配布しているソースコードではGameMgrに45行も無いです。
どこか紹介しているコードと違うのではないでしょうか?
GameMgr.javaの45行目でNullPointerExceptionが起きているなら、そこでNullになる原因を探ってみてはどうでしょう。
分からなければ、配布しているソースコードと比較してみてください。
ソースコードの比較の方法はこちらを参考にどうぞ
http://dixq.net/rp/winmerge.html
Re: イライラ棒アプリで謎のエラー
Posted: 2012年11月07日(水) 20:58
by たこ焼き
返信遅くなってすみません。
s2.6からダウンロードしたプロジェクトを実行した結果、同じようなエラーが出ました。
開発環境はeclipseのversion20.0.3.v201208082019-427395です。
Re: イライラ棒アプリで謎のエラー
Posted: 2012年11月07日(水) 21:05
by softya(ソフト屋)
たこ焼き さんが書きました:返信遅くなってすみません。
s2.6からダウンロードしたプロジェクトを実行した結果、同じようなエラーが出ました。
開発環境はeclipseのversion20.0.3.v201208082019-427395です。
ダウンロードしたものでエラーが出た行番号を教えて下さい。
それとeclipseではなくversion20.0.3ってADTのバージョンですよね?
>GameMgr.javaの45行目でNullPointerExceptionが起きているなら、そこでNullになる原因を探ってみてはどうでしょう。
は調べられたのですか?
Re: イライラ棒アプリで謎のエラー
Posted: 2012年11月08日(木) 22:47
by Dixq (管理人)
こちらで確認したところ、確かに発生しますね。
どうもアプリを終了すると、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: イライラ棒アプリで謎のエラー
Posted: 2012年11月12日(月) 20:32
by たこ焼き
Canvasのところを修正した結果エラーが出なくなりました。
どうもありがとうございました。
これからもAndroidプログラミングを続けていきたいと思っていますのでよろしくお願いいたします。