【发布时间】:2016-09-15 09:43:27
【问题描述】:
我在刷新标签时遇到问题。 我有这样的功能:
public void majMontantPaye(Double montantPaye) {
System.out.println("montant paye : "+montantPaye);
setMontantPaye(this.montantPaye+montantPaye);
Platform.runLater(() -> labelMontantPaye.setText(String.format("%.2f", this.montantPaye)+Messages.getMessage("0052")));
}
我的函数由 API 调用。此 API 与允许插入硬币的机器通信。而且我的功能必须显示机器中的总和插入。
问题是,当我在机器中同时插入大量硬币时,我的功能是正确调用检测到的每个硬币,因此System.out.println("montant paye : "+montantPaye); 正确显示检测到的每个硬币,但标签“labelMontantPaye”是不刷新检测到的每一个硬币。总和刚刚结束。
我猜 UI 没有正确刷新,但我不知道如何正确刷新我的标签。
请帮忙,对错误深表歉意,我是法国人。
【问题讨论】:
-
那个方法是怎么调用的?也许在应用程序线程上?此外,
Messages.getMessage("0052")是一个长期运行的操作吗?是否有同步的块/方法可以阻止此操作,直到在不同的线程上执行一些长时间运行的代码? -
我的函数在不同的线程中执行。我有一个
if(Platform.isFxApplicationThread()) { MainApp.getInstance.mainControllerLgetListeAchatController.majMontantPaye(_resteDu); } else { Platform.runLater(() -> MainApp.getInstance.mainControllerLgetListeAchatController.majMontantPaye(_resteDu); }); } -
runLateryou 将任务排入 FXApplicationThread。但是当你有很多“事件”时,你只会看到最后一个结果。 (也许是以前的一小段时间)。如果你真的想看到中间的结果,我现在不能给你一个解决方案,因为在 SwingUtilities 中没有runAndWait -
所以实际上你在 JavaFX 应用程序线程上执行它。这就是您的评论所显示的内容。
-
对于硬币检测,您运行一个无限线程?稍微描述一下逻辑以便我们提供帮助。我的意思是您通常如何使用线程。记住不要在 JavaFX 线程上运行任何 UI 东西。
标签: javafx