GWT.setUncaughtExceptionHandler()

moo*_*rsu 15 gwt exception-handling

是否有人成功使用上述语句来捕获异常,然后才将其作为警报进入浏览器?

我在应用程序入口点的第一行注册了一个自定义异常处理程序.但它没有按预期捕获异常.

public void onModuleLoad(){
    GWT.setUncaughtExceptionHandler(new MyExceptionHandler());
    ...
    ....
}
Run Code Online (Sandbox Code Playgroud)

编辑

这是我的两个班级:

我希望我的system.out将打印异常的细节,异常将被吞下,不应该发送到浏览器.

还是我错了?

package mypackage;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;

public class MyEntryPoint implements EntryPoint {

    public void onModuleLoad() {
    GWT.setUncaughtExceptionHandler(new ClientExceptionHandler());
    startApplication();
    }

    private void startApplication() {
    Integer.parseInt("I_AM_NOT_NUMBER");
    }
}
Run Code Online (Sandbox Code Playgroud)
package mypackage;

import com.google.gwt.core.client.GWT;

public class ClientExceptionHandler implements GWT.UncaughtExceptionHandler {

    @Override
    public void onUncaughtException(Throwable cause) {
    System.out.println(cause.getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

Isa*_*ett 21

我相信这里发生的事情是当前的JS事件循环正在使用DefaultUncaughtExceptionHandler,因为那是在循环开始时设置的处理程序.您需要将进一步的初始化推迟到下一个事件周期,如下所示:

public void onModuleLoad() {
    GWT.setUncaughtExceptionHandler(new ClientExceptionHandler());
    Scheduler.get().scheduleDeferred(new ScheduledCommand() {
        @Override
        public void execute() {
           startApplication();
           Window.alert("You won't see this");
        }
    });
}

private void startApplication() {
    Integer.parseInt("I_AM_NOT_A_NUMBER");
    // or any exception that results from server call
}
Run Code Online (Sandbox Code Playgroud)

更新:而且这里的问题描述为什么这个工作的,为什么它没有计划进行固定.