2015-10-28 83 views
0

我想使用format()來打印一個字符串,但它的失敗。錯誤是:空對象引用與控制檯類

java.lang.NullPointerException:試圖調用虛擬方法'java.io.Console java.io.Console.format(java.lang.String,java.lang.Object [])'on a空對象引用

下面是代碼片段。希望提供任何提示

public class BootNotifier extends BroadcastReceiver 
{ 
    public String TAG = "BootNotifier"; 
    Console console = System.console(); 
    String fmt = "%s"; 
    String msg = "Android boot completed successfully"; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.e(TAG, "onReceive"); 
     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) 
     { 
      Log.e(TAG, "onReceive: BOOT_COMPLETED"); 
      console.format(fmt, msg); 
     } 
    } 
} 
+0

這可能幫助:http://stackoverflow.com/questions/4203646/system-console-returns-null –

+0

我敢肯定,Android不給你'Console'。 – chrylis

回答

0

System.console()返回對與JVM關聯的控制檯設備的引用。如果您尚未使用控制檯設備配置JVM,並且沒有默認配置JVM,則System.console()可能會返回空引用。請參閱javadoc for java.io.Console。它很好地概述了爲什麼System.console()將返回null。作爲System.console()的替代方法,請嘗試使用System .out.println()或System .err.println();否則,請使用System .out.println()或System .err.println();

另一位用戶詢問the same question並收到有用的回覆。

0

使用此代碼:

public class BootNotifier extends BroadcastReceiver 
    { 
    public String TAG = "BootNotifier"; 
    String fmt = "%s"; 
    String msg = "Android boot completed successfully"; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.e(TAG, "onReceive"); 
     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) 
     { 
      Log.e(TAG, "onReceive: BOOT_COMPLETED"); 
      System.out.println(String.format(fmt, 5)); 
      //As System.out.println() is not recommended to use in Android ,So You can use below code in place of System.out.println() 
      Log.d(fmt,"5"); 

     } 
    } 
} 
+0

感謝您的所有意見,我可以確認System.console()確實返回null並且是問題的基礎 –

+0

我通過創建使用KLOG_ERROR()的NDK可執行文件解決了此問題。適用於我的使用案例,拋出這個以防其他人幫助 –