1

今天是我接触java的第一天。我无法弄清楚这个错误的原因。

MainActivity.java 如下所示

package com.example.ragefacefolks;

import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.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);

    }


}

你们不难知道它的原因。需要一点帮助。日志猫正在显示这些结果

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 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
09-27 07:59:24.707: E/AndroidRuntime(555):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-27 07:59:24.707: E/AndroidRuntime(555):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-27 07:59:24.707: E/AndroidRuntime(555):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-27 07:59:24.707: E/AndroidRuntime(555):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-27 07:59:24.707: E/AndroidRuntime(555):  at android.os.Looper.loop(Looper.java:123)
09-27 07:59:24.707: E/AndroidRuntime(555):  at android.app.ActivityThread.main(ActivityThread.java:3683)
09-27 07:59:24.707: E/AndroidRuntime(555):  at java.lang.reflect.Method.invokeNative(Native Method)
4

3 回答 3

1

这个

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

应该在onCreate之后setContentView。您在任何方法之外对其进行初始化

private Button bMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bMain = (Button) findViewById(R.id.button1);
}
于 2013-09-29T12:02:39.783 回答
1

您不能致电:

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

在这样的类中(具体来说,不能在之前调用onCreate)。

将此代码移至onCreate.

于 2013-09-29T12:02:47.760 回答
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方法。

于 2013-09-29T12:04:28.463 回答