有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓无法实例化活动组件信息{com.example.ragefacefolks/com.example.ragefacefolks.MainActivity}:java。lang.NullPointerException

今天是我学习java的第一天。我想不出这个错误的原因

主要活动。java如下所示

package com.example.ragefacefolks;

import 安卓.os.Bundle;
import 安卓.view.ContextMenu;
import 安卓.view.MenuInflater;
import 安卓.view.View;
import 安卓.view.ContextMenu.ContextMenuInfo;
import 安卓.widget.Button;
import 安卓.app.Activity;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    Button bMain = (Button) findViewById(R.id.button1);

    @Override
    public void registerForContextMenu(View view) {
        // TODO Auto-generated method stub
        super.registerForContextMenu(bMain);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);

    }


}

你们知道它的原因并不难。我需要一点帮助。 log cat正在显示这些结果

09-27 07:59:24.677: D/AndroidRuntime(555): Shutting down VM
09-27 07:59:24.677: W/dalvikvm(555): threadid=1: thread exiting with uncaught exception (group=0x40015560)
09-27 07:59:24.707: E/AndroidRuntime(555): FATAL EXCEPTION: main
09-27 07:59:24.707: E/AndroidRuntime(555): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.ragefacefolks/com.example.ragefacefolks.MainActivity}: java.lang.NullPointerException
09-27 07:59:24.707: E/AndroidRuntime(555):  at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
09-27 07:59:24.707: E/AndroidRuntime(555):  at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-27 07:59:24.707: E/AndroidRuntime(555):  at 安卓.app.ActivityThread.access$1500(ActivityThread.java:117)
09-27 07:59:24.707: E/AndroidRuntime(555):  at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-27 07:59:24.707: E/AndroidRuntime(555):  at 安卓.os.Handler.dispatchMessage(Handler.java:99)
09-27 07:59:24.707: E/AndroidRuntime(555):  at 安卓.os.Looper.loop(Looper.java:123)
09-27 07:59:24.707: E/AndroidRuntime(555):  at 安卓.app.ActivityThread.main(ActivityThread.java:3683)
09-27 07:59:24.707: E/AndroidRuntime(555):  at java.lang.reflect.Method.invokeNative(Native Method)

共 (3) 个答案

  1. # 1 楼答案

    拆线

    Button bMain = (Button) findViewById(R.id.button1);
    

    并更改onCreate方法

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        Button bMain = (Button) findViewById(R.id.button1);
        registerForContextMenu(bMain);
    }
    

    不需要重写registerForContextMenu方法

  2. # 2 楼答案

    这个

    Button bMain = (Button) findViewById(R.id.button1);
    

    应该在setContentView之后的onCreate中。您可以在任何方法之外初始化它

    private Button bMain;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bMain = (Button) findViewById(R.id.button1);
    }
    
  3. # 3 楼答案

    您不能呼叫:

    Button bMain = (Button) findViewById(R.id.button1);
    

    在这样的类中(特别是不能在onCreate之前调用)

    将此代码移到onCreate