Ваш вывод - это количество секунд, в течение которых ваша программа работала, а не частота кадров. Вы должны делить количество кадров (которое вы не собираете) на общее время выполнения.
Чтобы получить количество кадров, просто добавьте новую переменную вне игрового цикла и увеличивайте ее каждый раз до ...
public static void main(String[] args) {
long frames = 0;
joglplat m = new joglplat();
while(true){
frames++;
// other code here
System.out.println("framerate: " + ((System.nanoTime() / 1000000 - startTime) / frames ) );
}
}
Обратите внимание, что это даст вам среднюю частоту кадров на протяжении всего выполнения вашей программы. У вас есть еще два варианта: получить мгновенную частоту кадров и среднюю частоту кадров за последние N кадров.
Все стили в одном (непроверенные / некомпилированные, поэтому могут иметь некоторые ошибки, но должны помочь вам начать работу в правильном направлении):
public static void main(String[] args) {
long startTime = System.nanoTime();
long lastFrameTime = startTime;
long frames = 0;
int framesToAverage = 10;
long[] frameTimes = new long[framesToAverage];
joglplat m = new joglplat();
while(true){
// logic here
long currentFrameDuration = System.nanoTime() - lastFrame;
lastFrameTime = System.nanoTime();
long instantFramerate = currentFrameDuration / 1000000;
int currentFrameIndex = frames % frameTimes.length;
frameTimes[currentFrameIndex] = currentFrameDuration;
frames++;
long averageFramerate = ( ( lastFrameTime - startTime) / frames ) / 1000000;
long instantFramerate = currentFrameDuration / 1000000;
if( frames > frameTimes.length ) { // if it isn't, we don't have enough data yet
int firstFrameIndex = currentFrameIndex + 1;
if( firstFrameIndex > frameTimes.length ) {
firstFrameIndex = 0;
}
long averageFrameratePerN = ( ( frameTimes[currentFrameIndex] - frameTimes[firstFrameindex] ) / frameTimes.length ) / 1000000;
}
// yield/sleep here
}
}