多线程 – JavaFX使用线程和GUI
发布时间:2020-12-15 07:35:43 所属栏目:Java 来源:网络整理
导读:使用 JavaFX和Threads时遇到问题.基本上我有两个选择:使用Tasks或Platform.runLater.据我所知,Platform.runLater应该用于简单/简短的任务,而Task用于较长的任务.但是,我不能使用它们中的任何一个. 当我调用Thread时,它必须在任务中间弹出一个验证码对话框.
使用
JavaFX和Threads时遇到问题.基本上我有两个选择:使用Tasks或Platform.runLater.据我所知,Platform.runLater应该用于简单/简短的任务,而Task用于较长的任务.但是,我不能使用它们中的任何一个.
当我调用Thread时,它必须在任务中间弹出一个验证码对话框.在使用Task时,它忽略了我显示新对话框的请求……它不允许我创建一个新阶段. 另一方面,当我使用Platform.runLater时,它让我显示一个对话框,但是,程序的主窗口会冻结,直到显示弹出对话框. 我需要任何解决方案.如果有人知道如何处理这个或有一些类似的经验,并找到了解决方案,我期待着您的回复! 解决方法
正如puce所说,你必须使用任务或服务来完成你需要在后台完成的事情.而Platform.runLater则从后台线程中执行JavaFX Application线程中的事情.
您必须同步它们,其中一种方法是使用CountDownLatch类. 这是一个例子: Service<Void> service = new Service<Void>() { @Override protected Task<Void> createTask() { return new Task<Void>() { @Override protected Void call() throws Exception { //Background work final CountDownLatch latch = new CountDownLatch(1); Platform.runLater(new Runnable() { @Override public void run() { try{ //FX Stuff done here }finally{ latch.countDown(); } } }); latch.await(); //Keep with the background work return null; } }; } }; service.start(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |