【问题标题】:While downloading file in JavaFX app "This app is not responding" appears在 JavaFX 应用程序中下载文件时出现“此应用程序没有响应”
【发布时间】:2021-03-08 18:56:19
【问题描述】:

我想下载一个文件并等待它下载完成,这样就不会出现“未响应”错误。

                     if(isNeedToReDownload){
                        launchStatus.setText(LaunchStatus.DOWNLOADING.status);
                        downloadThread = new Thread(() -> {
                            for(File file : launchDir.listFiles()){
                                file.delete();
                            }
                            launchDir.delete();
                            downloadClient();
                            downloadMods();
                        });
                        downloadThread.start();
                    }
                    if(downloadThread != null){
                        downloadThread.join();
                        downloadThread.stop();
                    }
                }
                launchStatus.setText(LaunchStatus.STARTING.status);

【问题讨论】:

  • 启动一个新线程然后调用join()没有什么意义;您正在阻塞 FX 应用程序线程,因此在后台线程完成之前它无法呈现任何内容。另外,不要打电话给stop()(你的IDE没有警告你吗?)。
  • 使用javafx.concurrent.Task。请参阅文档以了解如何使用。观察任务何时完成,然后酌情执行下一组指令。不要阻塞等待任务完成。如果您阻止 JavaFX 应用程序线程,那么它就无法完成工作,应用程序变得无响应。

标签: java linux windows javafx process


【解决方案1】:

创建(无论是否可见)进度条。并在循环和其他事情上更新进度条。

【讨论】:

  • 想知道你想用不可见的进度条做什么?
  • 当 UI 线程被阻塞超过 4 秒时出现应用程序无响应。你可以让 progressBar.setVisible(false);并在下载文件时 progressBar.setProgress(1.0) 并重置
  • 如果可见性很重要,那只是 codicentagl,还有其他问题(没有minimal reproducible example 就无法判断;).. 清理你的线程代码
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多