我正在为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应用程序中也没有调用它。
我的问题是:如何追踪此错误?
答案 0 :(得分:2)
在Java中,有Errors
和Exceptions
。通常情况下,Error
非常重要,您的程序应该崩溃并退出。但是,出于调试目的,如果要捕获两者,则
catch (Throwable t)
{
t.printStackTrace();
}
获取两者的信息。