, wie das Problem in der Log-Katze zu lösen .. sagt die Fehlerwartezeit ist negativ und stürzt auf imulator und externes GerätJava Multithreading in android
dies mein Code Android in Java-Aktivität ist
public void run() {
long startTime;
long timeMills;
long waitTime;
long totalTime = 0;
int frameCount = 0;
long targetTime = 1000/FPS;
while (running){
startTime = System.nanoTime();
canvas = null;
try {
canvas = this.surfaceHolder.lockCanvas();
synchronized (surfaceHolder){
this.gamePanel.update();
this.gamePanel.draw(canvas);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(canvas != null){
try {
surfaceHolder.unlockCanvasAndPost(canvas);
}catch (Exception e){
e.printStackTrace();
}
}
}
timeMills = (System.nanoTime() - startTime)/1000000;
waitTime = targetTime - timeMills;
try {
this.sleep(waitTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
totalTime += System.nanoTime() - startTime;
frameCount++;
if(frameCount == FPS){
avrageFPS = 1000/(totalTime/frameCount)/1000;
frameCount = 0;
totalTime = 0;
System.out.print(avrageFPS);
}
}
}
und das ist das Protokoll
java.lang.IllegalArgumentException: millis < 0: -136
Was ist targetTime? Es sieht so aus, als ob es in diesem.sleep (waitTime) abstürzt, so dass Ihre waitTime = targetTime - timeMillis einen negativen Wert zurückgibt. Sie können nicht eine negative Zeit warten. –
Tareget Zeit ist die Zielmenge von FPS Ich brauche das Spiel mit –
zu laufen, so dass ich den Faden schlafen die verbleibende Zeit zwischen der Thread-Endung und dem Ziel, so dass sie die benötigten FPS erreichen –