按下菜单button导致在没有ActionBar的Activity中崩溃

我是Android的新手,并在我的第一个应用程序工作。

我有没有在其中的ActionBar的主要活动。 我不想在该Activity显示任何菜单。 一切正常工作但是,当我按下设备本身的菜单button,它会导致我的应用程序强制closures,而不是忽略它。

我正在开发sdk> = 8,所以我正在使用支持库。 我曾尝试添加OnCreateOptionMenu()代码中没有任何东西,但结束了相同的结果。

我的应用程序的名称是GUI和包是gui。 这里是Logcat:

 10-09 19:52:32.920: E/AndroidRuntime(7440): FATAL EXCEPTION: main 10-09 19:52:32.920: E/AndroidRuntime(7440): java.lang.NullPointerException 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.app.Activity.onCreatePanelMenu(Activity.java:2554) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280) 10-09 19:52:32.920: E/AndroidRuntime(7440): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:453) 10-09 19:52:32.920: E/AndroidRuntime(7440): at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:853) 10-09 19:52:32.920: E/AndroidRuntime(7440): at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1535) 10-09 19:52:32.920: E/AndroidRuntime(7440): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2052) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3924) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3872) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3007) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.os.Handler.dispatchMessage(Handler.java:99) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.os.Looper.loop(Looper.java:137) 10-09 19:52:32.920: E/AndroidRuntime(7440): at android.app.ActivityThread.main(ActivityThread.java:4921) 10-09 19:52:32.920: E/AndroidRuntime(7440): at java.lang.reflect.Method.invokeNative(Native Method) 10-09 19:52:32.920: E/AndroidRuntime(7440): at java.lang.reflect.Method.invoke(Method.java:511) 10-09 19:52:32.920: E/AndroidRuntime(7440): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 10-09 19:52:32.920: E/AndroidRuntime(7440): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 10-09 19:52:32.920: E/AndroidRuntime(7440): at dalvik.system.NativeStart.main(Native Method) 

我无法弄清楚这个错误的原因。 请帮我find它。 如果有其他信息需要,然后请让我知道。

Solutions Collecting From Web of "按下菜单button导致在没有ActionBar的Activity中崩溃"

我的猜测是这是AppCompat库中的一个错误。 如果你看看ActionBarImplICS.getThemedContext()的代码,你会发现它是空的mActionBar:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r1/android/support/v7/app/ActionBarImplICS.java#ActionBarImplICS.getThemedContext%28%29

我的猜测是,你正在使用没有标题的活动(因此也没有操作栏):

 requestWindowFeature(Window.FEATURE_NO_TITLE); 

如果我删除这个和启动标题/操作栏的活动,我一直无法重现崩溃。 现在,当你不需要或需要一个标题栏的应用程序运行不是一个很好的select。 我的build议是,你重写菜单键按下。 当我这样做的时候,应用程序停止了对我的崩溃:

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ( keyCode == KeyEvent.KEYCODE_MENU ) { // do nothing return true; } return super.onKeyDown(keyCode, event); }