为了账号安全,请及时绑定邮箱和手机立即绑定

如何让 JavaFX 在运行下一行代码之前等待节点完成配置

如何让 JavaFX 在运行下一行代码之前等待节点完成配置

郎朗坤 2022-05-25 15:34:48
我必须执行一个复杂的过程来加载需要不同时间的图像,并且在此过程运行时,我想通知用户一个进程实际上正在后台运行。为此,我已经放弃了一些动画,因为它实际上必须在不同线程的背景中,所以我想要的只是一个大红色文本,上面写着“正在加载......请稍候”。简化示例:主要:public class Controller {    @FXML    StackPane mainPane;    Text text;    public void initialize(){        text = new Text();        text.setText("please wait");        text.setVisible(false);        mainPane.getChildren().add(text);    }    public void handleMouseClick(){        text.setVisible(true);        longProcess();        text.setVisible(false);    }    public void longProcess(){        try {            Thread.sleep(10000);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}Fxml 文件:<?import javafx.scene.layout.StackPane?><StackPane fx:controller="sample.Controller"           xmlns:fx="http://javafx.com/fxml"           fx:id="mainPane"           onMouseClicked="#handleMouseClick"></StackPane>因此,这段代码创建了一个简单的堆栈窗格并向其中添加了一个不可见的文本,然后在鼠标单击时它应该首先显示文本然后使线程休眠(类似于我的漫长过程)然后使文本再次不可见但它只是使线程休眠和由于某种原因不显示文本。
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

将您的 handleMouseClickMethod 更改为如下所示,它应该可以工作


public void handleMouseClick(){

    int delayTime = 10;//Set this to whatever you want your delay in Seconds

    Label text = new Label("please wait");

    mainPane.getChildren().add(text);

    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();

    executorService.scheduleAtFixedRate(()->

            Platform.runLater(()->mainPane.getChildren().remove(text)), delayTime, 1, TimeUnit.SECONDS);

}


查看完整回答
反对 回复 2022-05-25
?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

编辑:


由于 kleopatra 指出旧代码段不起作用,我已经搜索了如何做到这一点并找到了这个答案:


“以下代码将暂停并更改标签中的值(完全公开,我正在重用我为另一个问题编写的代码):”


https://stackoverflow.com/a/26454506/10971694


老的:


下面的代码会有帮助吗?


while(!node.isVisible()){

   System.out.println("waiting...");

   try {

       Thread.sleep(delay);

   } catch (InterruptedException e) {

       e.printStackTrace();

   }

}


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号