Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX-Can';t取消计时器_Java_Javafx_Timer - Fatal编程技术网

JavaFX-Can';t取消计时器

JavaFX-Can';t取消计时器,java,javafx,timer,Java,Javafx,Timer,我遇到的问题是,每当我按下启动Snake游戏的“单人”按钮时,GameTimer类的一个新实例就会初始化,问题是当我单击“后退”按钮时,stopTimer方法无法取消或停止计时器,它只是忽略了它。计时器功能运行良好,但效率很低,只是说它很愚蠢 问题:stopTimer()方法不会取消计时器。 以下是我在github上的项目: 你的那部分代码工作得很好。然而: 停止计时器时,不会将秒数计数器重置为零。这就是为什么计时器似乎一直在运行 实际上,你并没有停止你的主游戏线程,所以它会在后台一次又一次地

我遇到的问题是,每当我按下启动Snake游戏的“单人”按钮时,GameTimer类的一个新实例就会初始化,问题是当我单击“后退”按钮时,stopTimer方法无法取消或停止计时器,它只是忽略了它。计时器功能运行良好,但效率很低,只是说它很愚蠢

问题:stopTimer()方法不会取消计时器。

以下是我在github上的项目:


你的那部分代码工作得很好。然而:

  • 停止计时器时,不会将秒数计数器重置为零。这就是为什么计时器似乎一直在运行
  • 实际上,你并没有停止你的主游戏线程,所以它会在后台一次又一次地运行,一次又一次地重置游戏板
  • 确保对多线程类使用volatile变量或/和同步
  • 确保您知道哪个actionBackToMenu被称为按钮操作方法
  • 不要在多个位置使用相同的调试消息(例如“从说明返回菜单”)
  • 在按钮的销毁阶段,参考按钮(或任何视觉元素)是不安全的
  • 在某些情况下,这将产生NullPointerException:

    Stage stage = (Stage) buttonBackToMenu.getScene().getWindow();
    
    这将有助于:

    Node target = (Node) event.getTarget();
    Stage stage = (Stage) target.getScene().getWindow();
    
  • 或者实际上——零:使用设计模式。特别是在训练期间(当你在宇宙中有所有的时间)
  • 祝你好运


    另外,如果您愿意,我可以将固定版本上传到Git。

    您的代码工作得非常好。然而:

  • 停止计时器时,不会将秒数计数器重置为零。这就是为什么计时器似乎一直在运行
  • 实际上,你并没有停止你的主游戏线程,所以它会在后台一次又一次地运行,一次又一次地重置游戏板
  • 确保对多线程类使用volatile变量或/和同步
  • 确保您知道哪个actionBackToMenu被称为按钮操作方法
  • 不要在多个位置使用相同的调试消息(例如“从说明返回菜单”)
  • 在按钮的销毁阶段,参考按钮(或任何视觉元素)是不安全的
  • 在某些情况下,这将产生NullPointerException:

    Stage stage = (Stage) buttonBackToMenu.getScene().getWindow();
    
    这将有助于:

    Node target = (Node) event.getTarget();
    Stage stage = (Stage) target.getScene().getWindow();
    
  • 或者实际上——零:使用设计模式。特别是在训练期间(当你在宇宙中有所有的时间)
  • 祝你好运


    另外,如果您愿意,我可以将固定版本上传到Git。

    您包含的代码看起来不错。包括所有创建计时器和计划任务的代码。我猜您正在重复调用schedule*方法。您包含的代码看起来不错。包括所有创建计时器和计划任务的代码。我猜你在反复调用schedule*方法。关于P.S.-是的,那太好了。我猜你克隆了项目,创建了自己的存储库,并将工作上传到了那里。那么,到您的存储库的链接是什么呢。另一种方法是我将您添加为合作者,但为此,我需要您的github用户名。关于P.S.-是的,那会很好。我猜您克隆了项目,创建了自己的存储库,并将您的工作上传到了那里。那么,到您的存储库的链接是什么呢。另一种方法是我将您添加为合作者,但为此我需要您的github用户名。