JavaFX-任务/后台处理-如何在任务中调用多个方法?

JavaFX-任务/后台处理-如何在任务中调用多个方法?,java,javafx,task,background-process,Java,Javafx,Task,Background Process,我试图自学JavaFX,但遇到了一个问题,我似乎无法完全理解,即使在阅读了我能找到的任何远程相关内容之后 我想做的是: 我基本上希望在JavaFX应用程序的后台运行一些快速处理,这样就不会阻塞用户的UI。当这种情况发生时,会出现一个UI元素,在后台处理完成后应立即删除该元素 因此,我试图做的是将这些方法调用移动到一个任务中,然后该任务应该在不冻结UI的情况下运行 Task task = new Task<Void>() { @Override

我试图自学JavaFX,但遇到了一个问题,我似乎无法完全理解,即使在阅读了我能找到的任何远程相关内容之后

我想做的是: 我基本上希望在JavaFX应用程序的后台运行一些快速处理,这样就不会阻塞用户的UI。当这种情况发生时,会出现一个UI元素,在后台处理完成后应立即删除该元素

因此,我试图做的是将这些方法调用移动到一个任务中,然后该任务应该在不冻结UI的情况下运行

Task task = new Task<Void>() {
            @Override
            protected Void call() {

                step1();
                step2();
                step3();
            }};

new Thread(task).start();
Task Task=新任务(){
@凌驾
受保护的无效调用(){
步骤1();
步骤2();
步骤3();
}};
新线程(任务).start();
我想调用我们当前所在的类的多个方法,但实际上只调用了第一个方法。在我看来,在步骤1结束后,它实际上并没有“返回”到任务。我已经试着查了一下这是如何工作的,我能做些什么,但老实说,我并没有变得更聪明。基本上,所有线程和工作者的例子都只包括如何循环和做重复的事情,但我真的只想在后台执行“单一执行”

这可能是我试图做的一件非常愚蠢的事情,显示了我对这件事的一点理解,但如果有人能给我指出正确的方向,我将非常感激

非常感谢

解决方案: 使用JavaFX时,建议使用“Platform.runLater(task)”,因为普通线程无法与UI交互。将引发IllegalStateException,线程将暂停/取消(?)。任务本身可以保持不变,但必须交给平台执行,以防止出现此问题。我改变了那一行,之后一切都很完美


我希望有一天这可能会对某些人有所帮助:-)

如果你正在放置一个线程来执行一项任务,那么没有什么可以阻止这个线程最终完成,除非有任何额外的条件。这个额外的条件可能是线程在step1()中找到的某个程序状态,阻止它返回(阻止继续下一个方法)。我的猜测是,您的线程被阻塞在一个可能的死锁上,可能是由无限循环(不知道)或调用任何永远不会返回的代码块引起的。即使您的代码干净且构建良好,您也可能正在为自己调用一些未知的例程。嗨!首先谢谢你的回答。我花了一段时间才找到问题的原因,因为我对Java还是个新手。因此,在我越过了非常混乱、无数的异常之后,我注意到在线程执行期间抛出了以下内容:“IllegalStateException:不在FX应用程序线程上”经过一番阅读,我明白了我启动线程的方式,它不会在FX平台线程下运行,这显然会在您与UI交互时导致问题。解决方案:Platform.runLater(任务),而不是在使用JavaFX时创建新线程。