我在Vaadin项目中看到了这个异常。然而,功能并没有真正的出现问题。在run()
方法中的代码完成了它预期的任务,但是这个异常还是会出现。
E 140619 124701.131 [Thread-2] MainUI - Uncaught throwable:
java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at com.vaadin.server.VaadinSession$FutureAccess.get(VaadinSession.java:123)
at com.vaadin.server.VaadinService.runPendingAccessTasks(VaadinService.java:1802)
at com.vaadin.server.VaadinSession.unlock(VaadinSession.java:1012)
at com.vaadin.server.VaadinService.ensureAccessQueuePurged(VaadinService.java:1763)
at com.vaadin.server.VaadinService.accessSession(VaadinService.java:1729)
at com.vaadin.server.VaadinSession.access(VaadinSession.java:1402)
at com.vaadin.ui.UI.access(UI.java:1372)
这里发生了什么
ui.acccess(new Runnable() {
@Override
public void run() {
//code here
}
}
我应该做什么?我能够捕获异常并忽略它吗,还是我的代码中存在错误?
这段代码使用@Push注解对MainUI进行了扩展,并且包含以下代码:
@Override
protected void init(VaadinRequest request) {
WrappedSession wrappedSession = request.getWrappedSession();
final String id = wrappedSession.getId();
log.info("Created new UI for session id {}", id);
VaadinSession.getCurrent().setErrorHandler(new DefaultErrorHandler() {
@Override
public void error(com.vaadin.server.ErrorEvent event) {
super.error(event);
log.error("Uncaught throwable: ", event.getThrowable());
}
});
...
}
另一个例子
[这部分由另一位作者添加]
我,Basil Bourque,在使用中遇到了似乎与此处相同的异常。该异常在生产环境中抛出(而非开发环境)。
使用Vaadin 7.1.3与Push,在Java 8 Update 20上使用Tomcat 8.0.12,在Mac OS X Mountain Lion上运行。
异常:
Nov 04, 2014 4:45:50 AM com.vaadin.server.DefaultErrorHandler doDefault
SEVERE:
java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at com.vaadin.server.VaadinSession$FutureAccess.get(VaadinSession.java:123)
at com.vaadin.server.VaadinService.runPendingAccessTasks(VaadinService.java:1800)
at com.vaadin.server.VaadinSession.unlock(VaadinSession.java:1013)
at com.vaadin.server.VaadinService.ensureAccessQueuePurged(VaadinService.java:1761)
at com.vaadin.server.VaadinService.accessSession(VaadinService.java:1727)
at com.vaadin.server.VaadinSession.access(VaadinSession.java:1403)
at com.vaadin.ui.UI.access(UI.java:1389)
at com.rainwatersoft.powerwrangler.curr_sup_dem.CurrSupDemReportUpdater.update(CurrSupDemReportUpdater.java:164)
at com.rainwatersoft.powerwrangler.curr_sup_dem.CurrSupDemReportUpdater.checkForUpdate(CurrSupDemReportUpdater.java:125)
at com.rainwatersoft.powerwrangler.curr_sup_dem.CurrSupDemReportUpdater.lambda$considerUpdate$2(CurrSupDemReportUpdater.java:110)
at com.rainwatersoft.powerwrangler.curr_sup_dem.CurrSupDemReportUpdater$$Lambda$3/1011224121.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
有问题的代码是使用Java 8的Lambda语法将一个Runnable传递给UI::access方法。
layout.getUI().access( () -> { // Runnable
layout.freshen( this.interval );
} );
@Push public class MainUI extends UI {
。 - Nikolay Kuznetsov