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

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

ただいまの
回答率

90.11%

インスタンス化でnullpointerexception

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,995

taro11

score 10

38行目のTextView mTextView = new TextView(this);でエラーが起きているようです。表示する段階でnullならエラーが出るのがまだ分かるですが、なぜインスタンス化する段階でこのようなエラーが出るのでしょうか。そして解決するにはどのようにしたらいいのでしょうか?

public class MainActivity extends Activity implements Runnable, SensorEventListener {
    private static final float ACCEL_WEIGHT = 3f;
    SensorManager manager;
    Ball ball;
    EnemyBall eball1;
    EnemyBall eball2;
    Handler handler;
    Handler mHandler;
    int width, height, time;
    float gx, gy, dpi;
    int mLaptime = 0;
    Timer mTimer = new Timer(true);
38. TextView mTextView = new TextView(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        FrameLayout framelayout = new FrameLayout(this);
        framelayout.setBackgroundColor(Color.WHITE);
        setContentView(framelayout);
        time = 1;
        handler = new Handler();
        mHandler = new Handler();
        dpi = getResources().getDisplayMetrics().densityDpi;

        framelayout.addView(mTextView);
        mTimer.schedule( new TimerTask(){
            @Override
            public void run() {
                // mHandlerを通じてUI Threadへ処理をキューイング
                mHandler.post( new Runnable() {
                    public void run() {

                        //実行間隔分を加算処理
                        mLaptime +=  1;

                        //計算にゆらぎがあるので小数点第1位で丸める
                        BigDecimal bi = new BigDecimal(mLaptime);
                        float outputValue = bi.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue();

                        //現在のLapTime
                        mTextView.setText(Float.toString(mLaptime));
                    }
                });
            }
        }, 0, 1000);
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                               at android.app.ActivityThread.access$900(ActivityThread.java:150)
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                               at android.os.Looper.loop(Looper.java:148)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                            Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                                               at android.content.ContextWrapper.getResources(ContextWrapper.java:87)
                                                                               at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81)
                                                                               at android.view.View.<init>(View.java:3784)
                                                                               at android.view.View.<init>(View.java:3898)
                                                                               at android.widget.TextView.<init>(TextView.java:677)
                                                                               at android.widget.TextView.<init>(TextView.java:671)
                                                                               at android.widget.TextView.<init>(TextView.java:667)
                                                                               at android.widget.TextView.<init>(TextView.java:663)
                                                                               at com.example.k15102kk.ball.MainActivity.<init>(MainActivity.java:38)
                                                                               at java.lang.Class.newInstance(Native Method)
                                                                               at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                               at android.app.ActivityThread.access$900(ActivityThread.java:150) 
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                               at android.os.Looper.loop(Looper.java:148) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

この38行目のような、メンバ変数の宣言時に初期化する文は、このクラスMainActivityのインスタンス生成時(具体的にはコンストラクタ実行前)に実行されます。この時点では、まだMainActivityのインスタンスは出来上がっていません。なので、thisはnullの状態です。nullをTextViewのインスタンスに渡してしまったため、NullPointerExceptionになってしまったのです。
このようなTextViewのインスタンス生成はonCreateメソッドで行うのが普通です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/05 15:26

    回答のおかげでエラーを抜けることができました。ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.11%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる