Почему мои Java GUI приложения Swing заблокированы до 60 кадров в секунду? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть монитор GSYN C 144 кадров в секунду, и я вижу разницу, когда приложения фиксируют меня до 60 кадров в секунду. Вот пример видео: https://www.youtube.com/watch?v=Z7qQ3T2k-p0&vq=hd1080 (это записано на телефоне с 240 FPS, затем видео замедляется на 0,25, чтобы вы могли видеть каждый кадр в 60 FPS)

Я могу " исправить это, добавив этот фрагмент кода:

        double last_frame = System.currentTimeMillis();
        final int FRAMES_PER_SECOND = 144;
        final int FRAME_TIME = 1000 / FRAMES_PER_SECOND;
        while (true) {
            if (System.currentTimeMillis()-last_frame > FRAME_TIME
            ) {
                frame.repaint();
                last_frame = System.currentTimeMillis();
            }else{
                Thread.sleep(1);// ako nema ovoga onda ce procesor stalno raditi
            }
        }

, но я чувствую, что это решение является хакерским, и я должен на самом деле редактировать оригинальный рендеринг свинга l oop.

Здесь минимальный ИНТЕЛЛИЖ проект требуется для демонстрации ошибки (однако вам потребуется монитор с поддержкой 144 Гц ) https://dropbox.com/s/jc074ufqkj8r2g7/fpsbug.7z?dl=1 проект просто GUI Swing с одним текстовым полем.

код MRE в основном это:

package me.vanjavk;
import javax.swing.*;
public class example {

    public static void main(String[] args) throws InterruptedException {
        JFrame frame = new JFrame("App");
        frame.setContentPane(new example().pnl);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
    private JPanel pnl;
    private JTextField textField1;
}
...