使用throw命令不抛出异常
我编写了一个方法,返回代码如下所示的FragmentManager实例。 问题是,如果传递给方法的上下文为空,然后终止App,我想抛出一个异常。使用throw命令不抛出异常
发生的事情是,当我通过空下面提到的方法,应用程序关闭,但在空指针异常的消息是:
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;
}
}
消息“getFragmentManagerInstance:Context reference is null”正被存储在e中。 您需要打印它才能使其显示在屏幕上。
在catch块,System.exit前添加一个print语句(1)
catch (NullPointerException e) {
System.out.println(e);
System.exit(1);
return null;
}
不显示
当然,这是因为你吞咽异常:
} catch (NullPointerException e) {
System.exit(1);
return null;
}
的该消息在e
进行,而你却不是t在catch
块中使用。
注意,它几乎是从未做赶上NullPointerException
正确的事情。在这种情况下,你可以简单地打印消息并终止直接应用:
if (thing == null) {
System.err.println("It's null!");
System.exit(1);
}
前System.exit(1)
只需使用e.printStackTrace()
,它将打印为你想
该消息是没有被显示,因为你没有写任何代码来打印它。如果要显示消息,请在退出前添加e.printStackTrace();
。
只要删除try块。只需键入
if (activity != null) {
return activity.getFragmentManager();
} else {
throw new NullPointerException("getFragmentManagerInstance: Context reference is null");
}
会做你想做的,因为NullPointerException
是一个未经检查的异常。
如果目标是终止应用程序,如果该值为null,这*不是* OP的要求。这个NPE可能会陷入更高层。 (不是我同意这是OP *应该*想要的)。 –
为了打印您需要将它们提供到输出流,如System.out
或System.err
的一些信息。
默认情况下,如果您致电ex.printstacktrace()
它将在System.err中打印异常。
您还可以使用ex.printstacktrace(System.out)
来选择您发送信息的位置,例如文件,控制台或任何输出。
此外,您的应用程序将立即停止在System.exit之后,以便您的代码行需要在退出之前。
我惊讶这还没有陈述,改变你的catch
块
} catch(NullPointerException e){
System.err.print(e.getMessage());
System.exit(1);
return null;
}
如果你要打印的信息给用户,可以考虑使用的Toast
而不是异常的消息。
为什么还要抛出异常?为什么不直接终止? –
@AndyTurner我认为这是一个很好的方式显示异常之前终止应用程序..但如果我不会抛出eception,只是终止应用程序,我该如何打印日志消息给用户呢? – user2121
不要抓住它。让它传播起来。 –