是javax.swing.Timer timer;
足够计算耗时吗?我正在做一个俄罗斯方 block 项目,它还计算玩家玩游戏所花费的时间。在 play
方法,
public void play() {
reset();
onPlay = true;
Thread thread = new Thread(new Game());
thread.start();
rightPanel.setPlayButtonEnable(false);
rightPanel.setPause(true);
rightPanel.setStop(true);
playItem.setEnabled(false);
pauseItem.setEnabled(true);
stopItem.setEnabled(true);
setBlockColorItem.setEnabled(false);
setBGColorItem.setEnabled(false);
rightPanel.requestFocus();
//time.start();
//timeElapsed = System.currentTimeMillis();
RightPanel.timeElapsedTextField.setText("");
timer.start();
startTime = System.currentTimeMillis();
}
在 stop
方法,
public void stop() {
isStop=true;
onPlay = false;
if (piece != null)
piece.isMoving = false;
playItem.setEnabled(true);
rightPanel.setPlayButtonEnable(true);
pauseItem.setEnabled(false);
rightPanel.setPauseButtonLabel(true);
stopItem.setEnabled(false);
resumeItem.setEnabled(false);
setBlockColorItem.setEnabled(true);
setBGColorItem.setEnabled(true);
rightPanel.setPause(false);
rightPanel.setStop(false);
reset();
//time.stop();
timer.stop();
long delta = (System.currentTimeMillis() - startTime)/10;
RightPanel.timeElapsedTextField.setText(Double.toString(delta/100.0) + " seconds");
}
这些够了吗?每当尝试显示耗时时,JTextField 都不会显示任何内容。有什么问题吗?非常感谢!
public void run() {
int column = 4, style = Piece.SHAPES[(int) (Math.random() * 7)][(int) (Math.random() * 4)];
//timer.start();
//startTime = System.currentTimeMillis();
while (onPlay) {
if (piece != null) {
if (piece.isAlive()) {
try {
Thread.currentThread().sleep(100);
}
catch (InterruptedException ie) {
ie.printStackTrace();
}
continue;
}
}
checkFullLine();
if (isGameOver()) {
playItem.setEnabled(true);
pauseItem.setEnabled(true);
resumeItem.setEnabled(false);
rightPanel.setPlayButtonEnable(true);
rightPanel.setPauseButtonLabel(true);
displayGameOver();
return;
}
piece = new Piece(style, -1, column, board);
piece.start();
//numDropped = numDropped+1;
//RightPanel.scoreTextField.setText(numDropped+"");
style = Piece.SHAPES[(int) (Math.random() * 7)][(int) (Math.random() * 4)];
rightPanel.setTipStyle(style);
numDropped = numDropped+1;
RightPanel.numDroppedTextField.setText(numDropped+"");
//RightPanel.numDroppedTextField = new JTextField(numDropped+"");
long startTime = System.currentTimeMillis();
}
long estimatedTime = ((System.currentTimeMillis() - startTime)/1000);
RightPanel.timeElapsedTextField.setText(estimatedTime+"");
}
最佳答案
您应该使用nanoTime()计算耗时。
long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;
您有一个正在运行游戏的线程。我认为你应该在 run() 方法的开始和 run() 方法的估计时间结束中计算 startTime 。我只能推测,因为我不知道 Game 类代码。
下面是如何做到这一点的简单说明。
import java.util.concurrent.TimeUnit;
public class Demo implements Runnable {
private volatile boolean shouldRun = true;
@Override
public void run() {
long startTime = System.nanoTime();
while (shouldRun) {
// do nothing
}
long estimatedTime = System.nanoTime() - startTime;
System.out.println(TimeUnit.NANOSECONDS.toSeconds(estimatedTime));//Print apprx 5 seconds since time may be required to actually enter in to run method after start
}
public void stop() {
shouldRun = false;
}
public static void main(String[] args) throws InterruptedException {
Demo demo = new Demo();
Thread thread = new Thread(demo);
thread.start();
Thread.sleep(5000);// 5 Seconds sleep
demo.stop();// Stop the thread
}
}
关于java - Java中计算耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12823883/