1

我有一个执行 I/O 的类(我们称之为 ABC)。FileOutputStream.close 之类的某些内容使您可以在它们周围使用 try catch 块。此外,我创建了自己的可投掷对象,以帮助用户和我了解正在发生的事情。

在这个类中,我传递了创建它的活动的上下文,并使其创建并警告对话框带有可抛出的文本。

所以这是我的问题,我需要从一个新线程中运行这个类,但仍然想从可抛出的文本中获取信息。

例如,这就是我课堂上典型的 catch 子句的样子。

new AlertDialog.Builder(myContext)
                        .setTitle("Error Message")
                        .setMessage(
                                "Error Code: #006" + "\n" + T.toString())
                        .setNeutralButton("OK",
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(
                                            DialogInterface dialog,
                                            int which) {
                                        // TODO: Add Ability to Email
                                        // Developer

                                    }
                                }).show();

我会做类似的事情吗

throw new Throwable(throwable);

this 在 ABC 类中代替警报对话框?然后我会将警报对话框移动到调用我的 Runnable 接口运行方法或在后台执行异步任务的尝试捕获吗?

4

1 回答 1

2

使用 Java 的Thread.UncaughtExceptionHandler保存文本/显示对话框。因此,您将创建一个扩展 Thread.UncaughtExceptionHandler 的新类,如下所示:

public class myThreadExceptionHandler implements Thread.UncaughtExceptionHandler
{
    private DataTargetClass dataTarget;
    public myThreadExceptionHandler(DataTargetClass c)
    { 
        dataTarget = c;
    }
    public void uncaughtException(Thread t, Throwable e)
    {
        dataTarget.exceptionObject = e;
        dataTarget.onException();
        // Just substitute in whatever method your thread uses to return information.
    }
}

在启动线程的代码中,您将执行以下操作:

foo = new DataTargetClass();
Thread t = new Thread(myIoRunnable(foo));
t.setUncaughtExceptionHandler(new myThreadExceptionHandler(foo));
t.start();
于 2012-05-10T04:32:25.680 回答