将onCreateOptionsMenu结果删除为NullPointerException

我发现当我按下设备上的菜单按钮时,它会给我一个NullPointerException。

public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); //NullPointer Here return true; } 

所以我做的是通过删除上面的第二行并将返回类型更改为false来完全禁用菜单。 但是,它仍然给我一个NullPointerException。 这是堆栈:

 11-25 03:50:20.931 1212-1212/com.sblive.aufschoolbliz E/InputEventSender﹕ Exception dispatching finished signal. 11-25 03:50:20.931 1212-1212/com.sblive.aufschoolbliz E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback 11-25 03:50:21.040 1212-1212/com.sblive.aufschoolbliz E/MessageQueue-JNI﹕ java.lang.NullPointerException at android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274) at android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89) at android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71) at android.app.Activity.onCreatePanelMenu(Activity.java:2505) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224) at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224) at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141) at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199) at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280) at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:413) at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:795) at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1471) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1867) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3791) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3774) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3516) at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3666) at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:1982) at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1698) at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1689) at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1959) at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:132) at android.os.Looper.loop(Looper.java:124) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 11-25 03:50:21.040 1212-1212/com.sblive.aufschoolbliz D/AndroidRuntime﹕ Shutting down VM 11-25 03:50:21.040 1212-1212/com.sblive.aufschoolbliz W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41465700) 11-25 03:50:21.150 1212-1212/com.sblive.aufschoolbliz E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.NullPointerException at android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274) at android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89) at android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71) at android.app.Activity.onCreatePanelMenu(Activity.java:2505) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224) at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224) at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141) at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199) at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280) at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:413) at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:795) at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1471) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1867) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3791) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3774) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3516) at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3666) at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:1982) at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1698) at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1689) at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1959) at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:132) at android.os.Looper.loop(Looper.java:124) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 

堆栈跟踪显示实际的NPE位于ActionBarImplICS.java

 @Override public Context getThemedContext() { return mActionBar.getThemedContext(); // here } 

您的操作栏为空可能有几个原因 。

  • 你不是在onCreate()中调用setContentView()吗?
  • 你在清单中至少缺少android:minSdkVersion="11"吗?
  • 你使用像android:theme="@style/Theme.NoTitle"这样的android:theme="@style/Theme.NoTitle"吗?
  • 你使用自定义样式,如android:windowIsFloatingandroid:backgroundDimEnabledandroid:windowNoTitle

编辑 :如果没有标题/操作栏,最好的解决方法似乎是通过覆盖菜单键按下 。

  public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); //NullPointer Here return true; } 

默认情况下创建用于支持选项菜单。 它膨胀指定的“菜单R.menu.main”您可能没有定义它。 如果您希望继续支持选项菜单,则在/ res / menu文件夹中将菜单定义为“main.xml”,否则如果您不想支持选项菜单,只需删除整个方法。