2015-04-23 26 views
1

我正在爲Qt中的android製作應用程序。所以爲了使用Google API,我需要實現Java。所以我已經看過QtNotifier的例子,我正在嘗試實現與starter相同的功能。try/catch在Java中不工作?

這個Java的例子來自QtNotifier的例子,所以它應該工作相同,但它沒有。我曾嘗試使用Qt調試器進行調試,但斷點似乎沒有觸發因此,我添加了println語句來查看哪行出錯。但這還不夠,所以我試圖使用catch/try子句打印堆棧跟蹤。

我已經實現了它這樣的:

package org.qtproject.qt5.example; 

import android.app.Notification; 
import android.app.NotificationManager; 
import android.content.Context; 
import java.lang.Object; 
import java.io.Writer; 
import java.io.StringWriter; 
import java.io.PrintWriter; 


public class NotificationClient extends org.qtproject.qt5.android.bindings.QtActivity 
{ 
    private static NotificationManager m_notificationManager; 
    private static Notification.Builder m_builder; 
    private static NotificationClient m_instance; 

    public NotificationClient() 
    { 
     System.out.println("it works2222"); 
     m_instance = this; 
    } 

    public static void notify(String s) 
    { 
     System.out.println(s); 

     try { 
      if (m_notificationManager == null) { 
       System.out.println("1111"); 
       m_notificationManager = (NotificationManager)m_instance.getSystemService(Context.NOTIFICATION_SERVICE); 
       System.out.println("2222"); 
       m_builder = new Notification.Builder(m_instance); 
       System.out.println("3333"); 
       m_builder.setContentTitle("A message from Qt!"); 
       System.out.println("4444"); 
      } 

      System.out.println("5555"); 
      m_builder.setContentText(s); 
      System.out.println("6666"); 
      m_notificationManager.notify(1, m_builder.build()); 
      System.out.println("7777"); 

     } catch(Exception e) { 
      StringWriter writer = new StringWriter(); 
      PrintWriter pw = new PrintWriter(writer); 
      e.printStackTrace(pw); 
      String errorDetail = writer.toString(); 
     } 
    } 
} 

輸出是:

I/System.out(4768): test string 
I/System.out(4768): 1111 

這似乎是m_instance仍然是零,因爲 「的System.out.println(」 它works2222" ) ;」不會被調用。但錯誤不會被捕獲。

是因爲這是一個不是例外的錯誤?

我也嘗試運行QtNotifier應用程序,但裏面的printstatement。

public NotificationClient() 
{ 
    System.out.println("it works2222"); 
    m_instance = this; 
} 

但是,這也不是在QtNotifier應用程序中調用。

我的問題是:如何追蹤這個錯誤?

回答

2

在Java中,既有Errors也有Exceptions。通常,Error足夠重要,以至於程序只會崩潰並退出。但是,出於調試的目的,如果你想抓住兩個你應該

catch (Throwable t) 
{ 
    t.printStackTrace(); 
} 

以獲得關於兩者的信息。

+0

謝謝,作品像魅力。 – CantThinkOfAnything