JavaFX任务返回映射需要太多时间
我有一个JFX任务,它正在从服务器接收哈希映射。此操作大约需要5秒钟,然后返回此映射以获取OnSucceeded EventHandler中的数据。在应用程序进入OnSucceeded EventHandler之前,此操作大约需要1分钟 有人知道为什么返回值到达Eventhandler需要这么长时间吗 另外,我试图返回null,但仍然需要很长时间。但是,如果我在业务行中进行注释,则任务运行正常JavaFX任务返回映射需要太多时间,java,javafx,concurrency,Java,Javafx,Concurrency,我有一个JFX任务,它正在从服务器接收哈希映射。此操作大约需要5秒钟,然后返回此映射以获取OnSucceeded EventHandler中的数据。在应用程序进入OnSucceeded EventHandler之前,此操作大约需要1分钟 有人知道为什么返回值到达Eventhandler需要这么长时间吗 另外,我试图返回null,但仍然需要很长时间。但是,如果我在业务行中进行注释,则任务运行正常 Task<HashMap<Long, PCSortArticle>> tas
Task<HashMap<Long, PCSortArticle>> taskO = new Task<HashMap<Long, PCSortArticle>>() {
@Override
protected HashMap<Long, PCSortArticle> call() throws Exception {
log.debug("start task loading article");
log.debug("requesting articles from server");
HashMap<Long, PCSortArticle> articles = business.getArticlesForCatalogLevel(treeKeyHolder.getSelectedTreeKey(true));
log.debug("got articles from server");
return articles;
}
};
taskO.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
log.debug("start building tableview articles");
}
});
new Thread(taskO).start();
Task taskO=新任务(){
@凌驾
受保护的HashMap调用()引发异常{
调试(“启动任务加载文章”);
调试(“从服务器请求文章”);
HashMap articles=business.getArticlesForCatalogLevel(treeKeyHolder.getSelectedTreeKey(true));
调试(“从服务器获取文章”);
归还物品;
}
};
setOnSucceeded(新的EventHandler(){
@凌驾
公共无效句柄(WorkerStateEvent事件){
调试(“开始构建tableview文章”);
}
});
新线程(taskO.start();
编辑:
我加了一些日志
2016-03-10 17:05:42835调试开始任务加载项目
2016-03-10 17:05:42836调试服务器请求文章
2016-03-10 17:05:44877调试从服务器获取文章
2016-03-10 17:06:39179调试开始构建tableview文章你能澄清一下是什么花费了时间吗?如果是
business.getArticlesForCatalogLevel(…)
的实际执行,那么在不知道该方法的功能的情况下,没有人能够真正回答这个问题。也许您可以将您的问题包含在日志输出中?就像我说的,业务呼叫需要5秒钟,这不是问题所在。return命令确实需要很长时间。我试图调试到任务代码中,但当我调试时,我找不到问题,因为它需要太长时间。当我浏览每一行并到达末尾时,我直接跳转到success EventHandler。我在我的帖子中添加了一些日志。我看到这种情况的唯一方法是如果你的FX应用程序线程太忙,无法访问Succeeded的处理程序。您是否通过Platform.runLater(…)
从business.getArticlesForCatalogLevel()
提交任何可运行文件?该方法仅对服务器进行远程调用并返回值。它看起来像:Result=remote.getData(params);返回结果
如果您仅使用模拟实现替换business.getArticlesForCatalogLevel()
的内容(即执行Thread.sleep(5000);
然后返回一些硬编码数据),会发生什么?