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

如何正确执行线程。javaFX中的sleep()?[重复]

楚浩然
2023-03-14

我正在编写一个简单的代码,用javaFX显示表的内容。我希望程序在每次显示新内容时暂停。

for(int i = 0; i < table.size(); i++){
    label.setText(table[i]);
    Thread.sleep(2000); // The program stops for 2 seconds 
}

问题是,线程。sleep()无法按计划工作。事实上,程序甚至在显示内容之前都会暂停。

我如何纠正这个问题?

共有1个答案

景元徽
2023-03-14

你应该使用时间线来完成这项任务。它允许您在给定的时间间隔内反复触发应用程序线程上运行的事件,而不会通过阻止JavaFX应用程序线程来阻止场景的布局/渲染。

label.setText(table[0]); // set text for the first time

Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(2), new EventHandler<ActionEvent>() {

    private int i = 1;    

    @Override
    public void handle(ActionEvent event) {
        label.setText(table[i]); // display next string
        i++;
    }
}));
timeline.setCycleCount(table.length - 1);
timeline.play();

 类似资料:
  • 问题内容: 我可以选择让用户从FileChooser提交多个文件,以通过一些代码进行处理。结果将是读取文件的IO,然后是对存储数据的实际大量计算。允许用户选择多个文件,并且由于文件处理不依赖于所选的任何其他文件,因此使我的工作变得更加轻松。 此外,用户需要具有按钮列表,每个要取消的任务一个按钮以及“全部取消”按钮。因此,我必须考虑选择性或集体杀死一项或所有任务的能力。 最后一个要求是,我不允许用户

  • 我的问题在定义上有点挑剔: 下面的代码可以用“忙着等待”来形容吗?尽管它使用thread.sleep()来允许上下文切换? PS--维基百科目前对忙碌等待的定义表明,忙碌等待是一种“不太浪费”的形式。

  • 我对使用Spring向类注入对象有疑问。我在我的项目中使用了这样的代码: 然后通常在以下方法中使用: 否则,我在Spring示例中发现,注入构造函数: 所以这两个都是正确的?或者每一个都有它的属性和用法?

  • 问题内容: 说我有以下代码: 现在,如果抛出,我该如何捕捉?一种方法是提供自己的实现,并为其中的设置custom 。另一种方法是将其包装为包含try-catch -block 的本地(匿名)。也许还有其他类似的解决方法。但是…以某种方式感觉很脏,我觉得这不应该那么复杂。有没有干净的解决方案? 问题答案: 干净的解决方法是使用而不是。这将返回一个,您可以用来检索结果或任务异常:

  • 问题内容: 我需要一个解决方案来正确停止Java中的线程。 我有实现Runnable接口的类: 我有启动和停止线程的类: 但是当我关闭时,我在类中得到了异常: 我正在使用JDK 1.6。所以问题是: 如何停止线程并且不引发任何异常? PS我不想使用;方法,因为它已过时。 问题答案: 在类中,你需要一种设置标志的方法,该标志通知线程它将需要终止,类似于你刚刚在类范围中使用的变量。 当你希望停止线程时

  • 如何正确执行collect以获取作为键并将Ethernet对象作为每个流元素的值?