JavaFX 60 fps帧率限制无效

3
我正在开发一个使用AnimationTimer()类的JavaFX动画。根据所有可靠来源,它应该默认以60 fps工作。然而,在我的笔记本电脑上,刷新率要高得多:在不同的窗口大小下,它在300-700之间变化。我使用的是IntelliJ IDEA Community Edition和Manjaro Linux GNOME Edition上的Oracle JDK8。我已经尝试过其他JDK,但仍然情况如此。它表现得好像JVM选项javafx.animation.fullspeed设置为true一样,但实际上并没有设置。同样的情况也发生在另一台运行Manjaro GNOME版的机器上。
我尝试了(未公开的)JVM选项: javafx.animation.fullspeed=false | true javafx.animation.framerate=value javafx.animation.pulse=value 它们什么都没改变,即使Settings.get(key)返回的值与设定的相同。
在另一台运行Windows 10的计算机上,FPS的表现是正确的: 在默认/无VM选项时保持60值,当javafx.animation.fullspeed=true时以全速运行,无论是在Windows还是在Manjaro/VirtualBox上。

请查看https://stackoverflow.com/questions/44327853/crazy-javafx-frame-rate-any-ideas以及其下方的评论。 - James_D
1
这是James_D上面提到的错误报告链接:https://bugs.openjdk.java.net/browse/JDK-8181764 但问题是,这个错误被拒绝了,因为JavaFX团队无法重现它。所以看起来这是一个非常特定的设置,才会触发这个错误。 - mipa
谢谢@James_D,这个解决方法很好地解决了问题。我会在上面的问题中添加一段代码片段。我自己永远也找不到这个解决方案。 - Piotr Miller
你可以自己回答问题,这比编辑问题并将解决方案放在问题中要好。 - jewelsea
@jewelsea - 我不确定。谢谢。 - Piotr Miller
1个回答

4

感谢@James_D的评论以及以下示例解决方案:

import javafx.application.Application;

public class Start {

    public static void main(String[] args) {

        //must be set before launching the Main class
        System.setProperty("quantum.multithreaded", "false");

        Application.launch(Main.class, args);
    }
}

请查看这个问题下的评论获取更多信息。
此外:这可能是一个双重图形相关的问题。强制使用第二个图形,如# optirun ./idea.sh也可以解决它。但是,在生产版本中,我认为最好将quantum.multithreaded设置为false。

刚刚发现我的 Ubuntu 17.04 上运行着 Java 1.8.0..131,帧率达到了 2500fps... 难怪 CPU 忙个不停。 - M. le Rutte
我的在Manjaro Linux上的应用程序过去使用12-15%的处理器,现在使用1-2%。同时,CPU温度恢复到稳定的45度。 - Piotr Miller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接