0

我編寫了一個方法,返回代碼如下所示的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; 
    } 
} 
+1

爲什麼還要拋出異常?爲什麼不直接終止? –

+0

@AndyTurner我認爲這是一個很好的方式顯示異常之前終止應用程序..但如果我不會拋出eception,只是終止應用程序,我該如何打印日誌消息給用戶呢? – user2121

+1

不要抓住它。讓它傳播起來。 –

回答

0

消息「getFragmentManagerInstance:Context reference is null」正被存儲在e中。 您需要打印它才能使其顯示在屏幕上。

在catch塊,System.exit前添加一個print語句(1)

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

不顯示

當然,這是因爲你吞嚥異常:

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

的該消息在e進行,而你卻不是t在catch塊中使用。


注意,它幾乎是從未做趕上NullPointerException正確的事情。在這種情況下,你可以簡單地打印消息並終止直接應用:

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

System.exit(1)

只需使用e.printStackTrace()

,它將打印爲你想

0

該消息是沒有被顯示,因爲你沒有寫任何代碼來打印它。如果要顯示消息,請在退出前添加e.printStackTrace();

1

只要刪除try塊。只需鍵入

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

會做你想做的,因爲NullPointerException是一個未經檢查的異常。

+0

如果目標是終止應用程序,如果該值爲null,這*不是* OP的要求。這個NPE可能會陷入更高層。 (不是我同意這是OP *應該*想要的)。 –

0

爲了打印您需要將它們提供到輸出流,如System.outSystem.err的一些信息。

默認情況下,如果您致電ex.printstacktrace()它將在System.err中打印異常。

您還可以使用ex.printstacktrace(System.out)來選擇您發送信息的位置,例如文件,控制檯或任何輸出。

此外,您的應用程序將立即停止在System.exit之後,以便您的代碼行需要在退出之前。

0

我驚訝這還沒有陳述,改變你的catch

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

如果你要打印的信息給用戶,可以考慮使用的Toast而不是異常的消息。