【发布时间】:2014-08-14 10:16:34
【问题描述】:
我在 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 扩展 UI,代码如下:
@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,在相同的用法中得到了似乎相同的异常。在生产使用(而不是开发)中抛出异常。
在 Mac OS X Mountain Lion 上的 Java 8 Update 20 上使用 Vaadin 7.1.3 和 Push 和 Tomcat 8.0.12。
例外:
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 );
} );
【问题讨论】:
-
我觉得奇怪的是会话管理中有一个NPE。您是否在以某种方式使用服务器推送?
-
服务器推送是什么意思?
-
是的,
@Push public class MainUI extends UI { -
您使用的是 vaadin 7.2.0 吗?推送区有很多修复
标签: java session exception vaadin vaadin7