刷新标签无法正常工作javafx
我在刷新标签时遇到问题。 我有这样一个函数:刷新标签无法正常工作javafx,javafx,Javafx,我在刷新标签时遇到问题。 我有这样一个函数: public void majMontantPaye(Double montantPaye) { System.out.println("montant paye : "+montantPaye); setMontantPaye(this.montantPaye+montantPaye); Platform.runLater(() -> labelMontantPaye.setText(String.form
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没有正确刷新,但我不知道如何正确刷新标签
请帮忙,对不起,我是法国人。您可以遵循以下逻辑:
如评论中所述:
使用Platform.runLater(…)将任务排入JavaFXThread
队列。但当你有很多“事件”时,你只能看到最后的结果。(也可能是之前的短时间内)
您可以遵循以下逻辑:
如评论中所述:
使用Platform.runLater(…)将任务排入JavaFXThread
队列。但当你有很多“事件”时,你只能看到最后的结果。(也可能是之前的短时间内)
该方法是如何调用的?也许在应用程序线程上?此外,Messages.getMessage(“0052”)
是一个长期运行的操作吗?是否有同步的块/方法可以阻止此操作,直到某些长时间运行的代码在不同的线程上执行?我的函数在不同的线程中执行。我有一个if(Platform.isFxApplicationThread()){MainApp.getInstance.maincontrollergetlistachatcontroller.majMontantPaye(_resteDu);}else{Platform.runLater(()->MainApp.getInstance.maincontrollergetlistachatcontroller.majMontantPaye(_resteDu);})使用runLater
将任务排入FXApplicationRead队列。但当你有很多“事件”时,你只能看到最后的结果。(也可能是之前的短时间内)。如果你真的想看到两者之间的结果,我现在不能给你一个解决方案,因为在Swingutilities中没有类似的runAndWait
,所以实际上你在JavaFX应用程序线程上执行它。这就是你的评论所显示的。对于硬币检测,你运行一个无限线程?请描述一点逻辑,以便我们能够提供帮助。我的意思是,你通常是如何使用线程的。记住不要在JavaFX线程上不运行UI。该方法是如何调用的?也许在应用程序线程上?此外,Messages.getMessage(“0052”)
是一个长期运行的操作吗?是否有同步的块/方法可以阻止此操作,直到某些长时间运行的代码在不同的线程上执行?我的函数在不同的线程中执行。我有一个if(Platform.isFxApplicationThread()){MainApp.getInstance.maincontrollergetlistachatcontroller.majMontantPaye(_resteDu);}else{Platform.runLater(()->MainApp.getInstance.maincontrollergetlistachatcontroller.majMontantPaye(_resteDu);})使用runLater
将任务排入FXApplicationRead队列。但当你有很多“事件”时,你只能看到最后的结果。(也可能是之前的短时间内)。如果你真的想看到两者之间的结果,我现在不能给你一个解决方案,因为在Swingutilities中没有类似的runAndWait
,所以实际上你在JavaFX应用程序线程上执行它。这就是你的评论所显示的。对于硬币检测,你运行一个无限线程?请描述一点逻辑,以便我们能够提供帮助。我的意思是你通常如何使用线程。记住不要在JavaFX线程上运行任何UI。