我有一个使用stop()方法执行清理任务(关闭线程,释放资源等)的应用程序。该清除操作全部封装到一个Task对象中,并且该任务的进度绑定到ProgressBar和Label组件,例如(请注意,无头值是通过读取配置文件获得的,仅表示用户选择了不使用该应用程序即可运行该应用程序GUI,在这种情况下,显然设置为false):
CompleteShutdownTask task = new CompleteShutdownTask();
if (!headless)
{
ProgressBar progressBar = statusBar.getProgressBar();
progressBar.progressProperty().unbind();
progressBar.progressProperty().bind(task.progressProperty());
Label progressLabel = statusBar.getProgressLabel();
progressLabel.textProperty().unbind();
progressLabel.textProperty().bind(task.messageProperty());
}
我知道此逻辑有效,因为在程序启动时,我也有完全相同的方式绑定到这些组件的初始化任务,并且工作正常。我的问题是任务运行正常,但是在stop()方法运行时GUI变得完全无响应。我什至有一个超级简单的方法可以在此按钮运行时禁用按钮,即使该按钮不起作用,在stop()执行时GUI也将完全冻结。
在执行stop()方法时发生这种GUI冻结是否正常?