当前位置: 首页 > 知识库问答 >
问题:

为什么thread.sleep()在JavaFX中不能相应地工作?

虞博涛
2023-03-14

当我使用JavaFX时,sleep函数不会相应地工作。如以下代码所示:

public class Controller {

@FXML private Label label;
@FXML private Button b1;

public void write() throws InterruptedException
{
    label.setText("FIRST TIME");
    for(int i=1;i<=5;i++)
    {
        System.out.println("Value "+i);
        label.setText("Value "+i);
        Thread.sleep(2000);
    }
    label.setText("LAST TIME");
}

共有1个答案

韦修文
2023-03-14

在阅读了注释中建议的链接后,您可能希望从fx线程中删除长进程(延迟)。
您可以通过调用另一个线程来完成:

public void write() {

    label.setText("FIRST TIME");

    new Thread(()->{ //use another thread so long process does not block gui
        for(int i=1;i<=6;i++)   {
            String text;
            if(i == 6 ){
                text = "LAST TIME";
            }else{
                 final int j = i;
                 text = "Value "+j;
            }

            //update gui using fx thread
            Platform.runLater(() -> label.setText(text));
            try {Thread.sleep(2000);} catch (InterruptedException ex) { ex.printStackTrace();}
        }

    }).start();
}

或者最好使用fx动画工具,如:

private int i = 0; // a filed used for counting 

public void write() {

    label.setText("FIRST TIME");

    PauseTransition pause = new PauseTransition(Duration.seconds(2));
    pause.setOnFinished(event ->{
        label.setText("Value "+i++);
        if (i<=6) {
            pause.play();
        } else {
            label.setText("LAST TIME");
        }
    });
    pause.play();
}
 类似资料:
  • 问题内容: 对这个重复的问题表示歉意,但是我还没有找到满意的答案。大多数问题都有自己的特定用例: Java- 替代thread.sleep在Java中,是否有任何更好的替代方法来跳过/避免使用Thread.sleep(1000)? 我的问题是针对非常通用的用例。等待条件完成。做一些操作。检查条件。如果条件不成立,请等待一段时间,然后再次执行相同的操作。 例如,考虑一种通过调用其createAPI表

  • 我有以下Sikuli代码在JMeter这是不工作。 我尝试了Beanshell采样器和JSR223采样器,但在这两种情况下都不起作用。这是我得到的错误。 JSR223采样器 响应消息:javax。剧本脚本异常:javax。剧本ScriptException:FindFailed:C:\scripts\patterns\vnc\vncviewer。png:(32x31)在R[0,0 1920x108

  • 使用scandir()函数时,我收到以下php警告: Scandir无法打开目录:公共html/page2中不允许操作。php在线3 第2页。php 我想使用这个功能来打印我的根文件夹的文件和子目录,但它不工作。 有人知道怎么修吗?

  • 问题内容: 我希望能够在OSX中的Vagrant之外使用docker。现在这是不可能的。是什么原因使其不仅仅限于linux安装? 问题答案: Docker只是系统提供的容器之上的抽象和自动化层。 技术上的限制是OS X不支持操作系统级别的虚拟化,例如Linux中的容器或FreeBSD中的jail(即使OS X是半血的BSD)。 但是,尽管如此,Docker仍旨在提供一种共享容器映像的简便方法,并确

  • 我有这个项目。然后我做以下步骤: 转到 预期结果:错误消息(在浏览器中呈现) 白标签错误页 此应用程序没有 /error的显式映射,因此您将此视为一种退回。星期二八月27 16:59:23CEST 2019有一个意外的错误(类型=未找到,状态=404)。没有可用的消息 如何更改附加的代码,使文件索引代替此错误。是否呈现xhtml? 更新1:如果我去,我得到这个错误: 白标签错误页此应用程序没有/E

  • 我正在使用React路由器开发React web应用程序。在我的应用程序中。我已经导入了js文件头和主组件。在home组件中,我有两个组件,分别称为在线银行和信用卡,它们是我从在线银行导入的。js和信用卡。js文件。 当用户单击主页中的链接按钮时。js组件、在线银行和信用卡组件应呈现。 相反,我得到了一个名为error:Invariant failed的错误:您不应该使用 为什么它不起作用? 索引