try / catch不能用Java工作?

时间:2015-04-23 15:39:24

标签: java android qt exception

我正在为Qt制作Android应用程序。因此,为了使用Google API,我需要实现Java。所以我查看了QtNotifier示例,并尝试将其作为启动器实现。

这个Java示例来自QtNotifier示例,所以它应该工作相同,但它没有。我曾尝试使用Qt调试器调试它,但断点似乎没有触发因此我添加了println语句以查看它出错的行。但这还不够,所以我尝试使用catch / try子句打印stacktrace。

我已经像这样实现了它:

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仍为null,因为" System.out.println("它工作2222");"没有被召唤。但错误并没有被抓住。

是因为这是一个不是例外的错误吗?

我也尝试过运行QtNotifier应用程序但内部的printstatement。

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

但是在QtNotifier应用程序中也没有调用它。

我的问题是:如何追踪此错误?

1 个答案:

答案 0 :(得分:2)

在Java中,有ErrorsExceptions。通常情况下,Error非常重要,您的程序应该崩溃并退出。但是,出于调试目的,如果要捕获两者,则

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

获取两者的信息。