方法可能产生';java.lang.NullPointerException';

方法可能产生';java.lang.NullPointerException';,java,nullpointerexception,Java,Nullpointerexception,我试图在一个选项卡式活动中,将app图标添加到app栏中,答案是:方法可能会生成“java.lang.NullPointerException”。我已经阅读并尝试了这里的所有答案,但没有一个对我有用。我想我可以用assert getSupportActionBar()解决它无效的该错误在MainActivity.java中消失,但随后应用程序仍会崩溃 致命异常:主 进程:com.gadgetcatch.test,PID:25826 java.lang.RuntimeException:无法启动a

我试图在一个选项卡式活动中,将app图标添加到app栏中,答案是:方法可能会生成“java.lang.NullPointerException”。我已经阅读并尝试了这里的所有答案,但没有一个对我有用。我想我可以用assert getSupportActionBar()解决它无效的该错误在MainActivity.java中消失,但随后应用程序仍会崩溃

致命异常:主 进程:com.gadgetcatch.test,PID:25826 java.lang.RuntimeException:无法启动activity ComponentInfo{com.gadgetcatch.test/com.gadgetcatch.test.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.support.v7.app.ActionBar.setLogo(int)'

我是Java的初学者,我很想了解为什么会发生这种情况

以下是MainActivity.java文本

    package com.gadgetcatch.test;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

    public class MainActivity extends AppCompatActivity {

        /**
         * The {@link android.support.v4.view.PagerAdapter} that will provide
         * fragments for each of the sections. We use a
         * {@link FragmentPagerAdapter} derivative, which will keep every
         * loaded fragment in memory. If this becomes too memory intensive, it
         * may be best to switch to a
         * {@link android.support.v4.app.FragmentStatePagerAdapter}.
         */
        private SectionsPagerAdapter mSectionsPagerAdapter;

        /**
         * The {@link ViewPager} that will host the section contents.
         */
        private ViewPager mViewPager;

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

            assert getSupportActionBar() != null;
            android.support.v7.app.ActionBar ab = getSupportActionBar();
            ab.setLogo(R.drawable.babyicon);

            ab.setDisplayUseLogoEnabled(true);
            ab.setDisplayShowHomeEnabled(true);

            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            // Create the adapter that will return a fragment for each of the three
            // primary sections of the activity.
            mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

            // Set up the ViewPager with the sections adapter.
            mViewPager = (ViewPager) findViewById(R.id.container);
            mViewPager.setAdapter(mSectionsPagerAdapter);



        }

    }
我在这里只添加了与我的问题有关的部分。

根据我收集的信息,生产代码逻辑不鼓励使用assert关键字。只有(1)在运行代码时在IDE中启用断言,(2)在命令行中启用java-ea选项,或者(3)在调试模式下默认情况下,才会出现这一行。我猜您的IDE会识别这一点,并删除关于NPE的警告。我的建议是在这里使用常规的null检查,并找出getSupportActionBar()返回null值的原因