使用throw命令不会抛出异常

时间:2017-09-24 18:26:50

标签: java android exception exception-handling nullpointerexception

我正在编写一个返回FragmentManager实例的方法,如代码belwo所示。 prblem是,如果传递给方法的上下文为null,我想抛出异常,然后终止App。

当我将null传递给下面提到的方法时,应用程序会关闭但是NullPointerException中的消息是:

getFragmentManagerInstance: Context reference is null

未显示

请让我知道如何抛出异常并正确终止应用程序。

public static FragmentManager getFragmentManagerInstance(Activity activity) throws Exception {

    try {
        if (activity != null) {
            return activity.getFragmentManager();
        } else {
            throw new NullPointerException("getFragmentManagerInstance: Context reference is null");
        }
    } catch (NullPointerException e) {
        System.exit(1);
        return null;
    }
}

7 个答案:

答案 0 :(得分:1)

只需删除try块。只需输入

即可
    if (activity != null) {
        return activity.getFragmentManager();
    } else {
        throw new NullPointerException("getFragmentManagerInstance: Context reference is null");
    }

将执行您想要的操作,因为NullPointerException是未经检查的例外。

答案 1 :(得分:0)

  

未显示

当然,那是因为你吞下这个例外:

} catch (NullPointerException e) {
    System.exit(1);
    return null;
}

邮件在e中传送,您未在catch块中使用该邮件。

请注意,抓住NullPointerException几乎永远是正确的做法。在这种情况下,您只需打印消息并直接终止应用程序:

if (thing == null) {
  System.err.println("It's null!");
  System.exit(1);
}

答案 2 :(得分:0)

只需使用e.printStackTrace()

即可

之前System.exit(1)

它将按照您的意愿打印

答案 3 :(得分:0)

由于您还没有编写任何代码进行打印,因此未显示该消息。如果要显示消息,请在退出前添加e.printStackTrace();

答案 4 :(得分:0)

消息" getFragmentManagerInstance:上下文引用为空"正在存储在e。 您需要打印才能在屏幕上显示。

在catch块中,在System.exit(1)

之前添加一个print语句
catch (NullPointerException e) {
        System.out.println(e);
        System.exit(1);
        return null;
}

答案 5 :(得分:0)

要打印某些信息,您需要将它们提供给输出流,例如System.outSystem.err

默认情况下,如果您调用ex.printstacktrace(),它将在System.err中打印异常。

您还可以使用ex.printstacktrace(System.out)选择发送信息的位置,例如文件,控制台或任何输出。

此外,您的应用程序将在System.exit之后立即停止,因此您的代码行必须在退出之前。

答案 6 :(得分:0)

我很惊讶尚未说明,请将catch块更改为

} catch(NullPointerException e){
    System.err.print(e.getMessage());
    System.exit(1);
    return null;
}

如果您要向用户打印消息,请考虑使用Toast而不是异常消息。