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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1969閲覧

SurfaceViewを使って動作させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/05/19 04:29

###前提・実現したいこと
SurfaceView を使い、円を連続的に表示させて、画面の端にぶつかったら跳ね返らせたい。

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

エミュレータで実行させると強制終了してしまいます。

以下がログです。

05-19 04:18:21.178 7879-7879/? I/art: Not late-enabling -Xcheck:jni (already on) 05-19 04:18:21.178 7879-7879/? W/art: Unexpected CPU variant for X86 using defaults: x86 05-19 04:18:21.324 7879-7879/numa.surfaceviewtestactivity W/System: ClassLoader referenced unknown path: /data/app/numa.surfaceviewtestactivity-2/lib/x86 05-19 04:18:21.330 7879-7879/numa.surfaceviewtestactivity I/InstantRun: Starting Instant Run Server for numa.surfaceviewtestactivity 05-19 04:18:21.844 7879-7929/numa.surfaceviewtestactivity E/AndroidRuntime: FATAL EXCEPTION: Thread-4 Process: numa.surfaceviewtestactivity, PID: 7879 java.lang.NullPointerException: Attempt to invoke interface method 'android.graphics.Canvas android.view.SurfaceHolder.lockCanvas()' on a null object reference at numa.surfaceviewtestactivity.MainActivity.onDrow(MainActivity.java:51) at numa.surfaceviewtestactivity.MainActivity.run(MainActivity.java:72) at java.lang.Thread.run(Thread.java:761)

###該当のソースコード

以下がSurfaceViewをセットするActivityです。

Java

1package numa.surfaceviewtestactivity; 2 3import android.app.Activity; 4import android.os.Bundle; 5import android.widget.LinearLayout; 6 7/** 8 * Created by user on 2017/05/17. 9 */ 10 11public class DrawActivity extends Activity { 12 13 @Override 14 public void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 //SurfaceViewをセットする 17 setContentView(new MainActivity(this)); 18 } 19 20

以下がSurfaceViewの中身です。

Java

1package numa.surfaceviewtestactivity; 2 3import android.app.Activity; 4import android.content.Context; 5import android.graphics.Canvas; 6import android.graphics.Color; 7import android.graphics.Paint; 8import android.support.v7.app.AppCompatActivity; 9import android.os.Bundle; 10import android.util.Log; 11import android.view.SurfaceHolder; 12import android.view.SurfaceView; 13 14public class MainActivity extends SurfaceView implements SurfaceHolder.Callback,Runnable { 15 16 private SurfaceHolder holder; 17 Paint paint=null; 18 Thread thread =null; 19 int X = 0; 20 int Y = 0; 21 int Xv=5; 22 int Yv=5; 23 24 public MainActivity(Context context) { 25 super(context); 26 getHolder().addCallback(this); 27 paint = new Paint(); 28 paint.setColor(Color.RED); 29 thread=new Thread(this); 30 thread.start(); 31 } 32 33 @Override 34 public void surfaceCreated(SurfaceHolder holder) { 35 Canvas canvas = holder.lockCanvas(); 36 canvas.drawColor(Color.WHITE); 37 holder.unlockCanvasAndPost(canvas); 38 } 39 40 @Override 41 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 42 43 } 44 45 @Override 46 public void surfaceDestroyed(SurfaceHolder holder) { 47 thread=null; 48 } 49 50 public void onDrow(SurfaceHolder holder) { 51 Canvas canvas = holder.lockCanvas(); 52 if (canvas != null) { 53 canvas.drawCircle(X, Y, 10, paint); 54 holder.unlockCanvasAndPost(canvas); 55 } 56 } 57 58 @Override 59 public void run() { 60 61 while (thread!=null){ 62 63 if (X<0||getWidth()<X){ 64 X*=-1; 65 }else if (Y<0||getHeight()<Y){ 66 Y*=-1; 67 } 68 69 X+=Xv; 70 Y+=Yv; 71 72 onDrow(holder); 73 } 74 75 } 76 77 }

###補足情報(言語/FW/ツール等のバージョンなど)
AndroidStudio2.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーログを読みましょう。
MainActivity.javaの51行目でNull参照が発生しています。

また、AndroidにおいてActivityは特殊な意味を持つので、Activityでは無いクラスに命名すると混乱の元になりますよ。

投稿2017/05/19 05:24

yona

総合スコア18155

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問