gpt4 book ai didi

java - 如何跟踪棘手的JavaFx卡住/挂起

转载 作者:行者123 更新时间:2023-12-03 13:09:10 26 4
gpt4 key购买 nike

我有一个JavaFX 8应用,它有时会挂起/冻结。我觉得我已经排除了造成此问题的许多原因,但它仍在发生。

不幸的是,我无法按需复制冻结/挂起。实际上,这仅发生在(到目前为止)我同事的计算机上。它可能在应用程序运行后不久发生,或者可能在数小时后发生,或者根本没有发生。在任何用户启动事件(例如按下按钮)之后,都不会发生这种情况。

我有一些后台线程正在运行,这些线程从套接字读取数据并更新JavaFX UI。这些更新始终通过Platform.runLater()方法完成。

后台线程每秒可能读取数百个数据更新,因此我应用了限制功能来防止UI上的更新过多,如此处建议的:Throttling javafx gui updates

用户可以启动一些很长的任务,这些任务在JavaFX UI线程上运行,或者使用Task方法。我知道并期望在JavaFX UI线程上调用执行时间较长的方法时,JavaFX UI会阻塞/冻结。但是,只有通过用户按下按钮才能进行此类调用,并且如上所述,冻结发生时没有用户以任何方式与App进行交互。

我已经在同事的计算机上冻结了两次(冻结),并检查了JConsole和VisualVM中的过程。线程转储没有显示死锁。当我将线程转储与非冻结的JavaFX App线程转储进行比较时,没有明显的区别。

看来只有JavaFX UI被冻结了。后台线程继续运行而没有错误。

发生冻结时,CPU容量不高,计算机运行也不慢。

我的App代码由许多类组成,因此在此处将其包括在内并不是一件容易的事,尤其是因为我不知道哪种方法会导致冻结。因此,我的问题比我想要的要广泛得多:

  • 鉴于上述主张,您对什么有任何建议
    可能是这种错误的原因?
  • 鉴于上述断言,请执行
    您对什么可能是另一种跟踪方式有任何建议
    这样的错误?
  • 最佳答案

    您是否尝试过AOP?

    Aspect Orientated programming

    在您的情况下,它允许您在使用每个方法之前和之后运行一个方法,如果您记录了一些时间(如果这些时间大于某个时间),则可以确定是哪段代码引起了该问题,例如记录方法内的时间是否大于5秒

    请参阅here以获取有关该教程的信息

    关于java - 如何跟踪棘手的JavaFx卡住/挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42955247/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com