У меня есть монитор 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;
}