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

在定时循环中更新javafx窗格?[重复]

贺飞
2023-03-14
Timer randomTimer = new Timer();
     randomTimer.schedule(new TimerTask() {
     @Override
     public void run() {

         IN HERE IS A LONG PROCESS OF ADDING A CIRCLE TO MY ARRAYLIST CALLED
         SHAPES WHICH HAS NO ERROR ON ITS OWN

         int size = Shapes.size();
         MyPane.getChildren().add(Shapes.get(size));
         }
    }, 0, 1000);

每秒钟我都会创建一个新的圆,并将其添加到名为“形状”的圆阵列列表中。我需要他们将其添加到MyPane,以便在javafx窗口中显示

然而我得到了这个错误。

线程“Timer-0”java中出现异常。lang.IllegalStateException:不在FX应用程序线程上;currentThread=Timer-0

我曾尝试使用其他计时方法,如ScheduledExecutorService,但未能传入数组列表。这种计时方法允许我创建新的圆圈,并将它们添加到阵列中,但我无法在屏幕上显示它们。

请提前向我们寻求帮助

共有1个答案

顾宣
2023-03-14

这是因为您试图在非javafx线程中修改javafx节点(如错误描述所述)。我认为以下几点可以解决这个问题。

 Timer randomTimer = new Timer();
 randomTimer.schedule(new TimerTask() {
     @Override
     public void run() {
           // do your stuff including the next
           int size = Shapes.size();
           Platform.runLater(() -> {
               MyPane.getChildren().add(Shapes.get(size));
          });
     }
}, 0, 1000);

基本上,Platform.run稍后()将在thr JavaFX-Main Thread上运行给定的runnable。因为它是主线程,你应该保持操作尽可能小(如上所示),以防止你的ui变成无响应的时刻。

 类似资料:
  • 在我的项目中,我有一个包含多个值的ComboBox。当我的应用程序开始时,我执行以下操作: 其中是字符串列表。 同时,在应用程序中,可以更改此值。但是,由于我已经将此组合框添加到我的GridPane中,然后在该值更改(gui.columns)时添加到场景中,因此新值没有显示在组合框中。因为我已经添加了旧的gui.course。有没有办法用新的gui.course_P更新createTestButt

  • 我正在尝试重新启动时循环。我已经声明了布尔类型的变量保去。如果int变量x不在窗口中,保去将变为假。然后重置()方法必须保持去=真。它可以工作,但同时循环不工作。 使用reset()和checkWin()初始化: 第二类带有线程、保持和时循环:

  • 问题内容: 我正在寻找某种有关组织应用程序的建议。 当您拥有包含内容选择的主菜单时,请按一个按钮,则获取控制器有两个选择:a)更改当前显示主菜单的内容b)创建一个新场景并将舞台切换到该场景一 你在用什么 有什么最佳实践吗? 目前,我更喜欢a),因为我可以保持事物链接状态栏等,但这是“干净”的方式吗? 问题答案: 首先,需要考虑一些事情: 1)更改场景将取消链接到您附加到该事件处理程序的链接,并且可

  • 运行这段代码,我希望它增加测试变量5秒,然后完成。 然而,当我运行它时,程序并没有结束(我假设,我已经给了它合理的时间)。然而,如果我将while循环改为 程序在预期的时间内完成(并打印出许多行)。我不明白。为什么会出现这种现象?

  • 问题内容: 在执行do-while循环时,让JButton重复更新(与计时器一起使用)时遇到了一些麻烦。我正在开发一个简单的游戏,在10 * 10的图块对象网格上玩,该对象对应于具有100个按钮的JButton arrayList。 程序的此部分处理简单的寻路(即,如果我单击角色,然后单击一个空的图块,则角色将在到达目标的途中在每个图块中移动)。每个步骤之间都有一定的延迟,因此用户可以看到角色的进

  • 我一直想用python制作一个排序算法可视化工具,并决定使用Tkinter库作为我可视化数据的方式(如果有人有更好的库可以使用,我愿意接受建议,我查看了matplotlib,但不愿意使用)。我的问题是,在对数组排序时,我想进行交换,在交换后显示更新的数组,然后继续排序;但最终发生的是数组排序,然后更新整个排序的数组。 我也试过这个应用程序。在(300,self.redrawCanvas)之后,并得