long nextSecond = System.currentTimeMillis() + 1000;
int frameInLastSecond = 0;
int framesInCurrentSecond = 0;
public void paint() {
// ... other drawing code goes here
long currentTime = System.currentTimeMillis();
if (currentTime > nextSecond) {
nextSecond += 1000;
frameInLastSecond = framesInCurrentSecond;
framesInCurrentSecond = 0;
}
framesInCurrentSecond++;
g.drawString(framesInLastSecond + " fps", 20, 20);
}
Кстати, ваш код не является потокобезопасным: поскольку paint()
вызывается из потока диспетчеризации событий, а run()
в запущенном вами потоке, методы должны синхронизировать доступ к общему состоянию (поляBallApplet
).
Также обратите внимание, что paint()
будет вызываться, если часть окна, которая ранее была закрыта другим окном, должна быть перекрашена.Приведенный выше код будет считать это как "кадр".Если вы этого не хотите, вы не должны запускать рисование, используя repaint()
.