Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX任务返回映射需要太多时间_Java_Javafx_Concurrency - Fatal编程技术网

JavaFX任务返回映射需要太多时间

JavaFX任务返回映射需要太多时间,java,javafx,concurrency,Java,Javafx,Concurrency,我有一个JFX任务,它正在从服务器接收哈希映射。此操作大约需要5秒钟,然后返回此映射以获取OnSucceeded EventHandler中的数据。在应用程序进入OnSucceeded EventHandler之前,此操作大约需要1分钟 有人知道为什么返回值到达Eventhandler需要这么长时间吗 另外,我试图返回null,但仍然需要很长时间。但是,如果我在业务行中进行注释,则任务运行正常 Task<HashMap<Long, PCSortArticle>> tas

我有一个JFX任务,它正在从服务器接收哈希映射。此操作大约需要5秒钟,然后返回此映射以获取OnSucceeded EventHandler中的数据。在应用程序进入OnSucceeded EventHandler之前,此操作大约需要1分钟

有人知道为什么返回值到达Eventhandler需要这么长时间吗

另外,我试图返回null,但仍然需要很长时间。但是,如果我在业务行中进行注释,则任务运行正常

 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);
然后返回一些硬编码数据),会发生什么?