我想在Android上制作一个简单的计时器,每秒更新一次TextView。它只是像扫雷一样计算秒数。
问题是当我忽略tvTime.setText(...)(将其变为// tvTime.setText(...))时,每秒钟会在LogCat中打印出以下数字。但是当我想将此数字设置为另一个线程中创建的TextView时,程序会崩溃。
有没有人有想法如何轻松解决这个问题?
以下是代码(该方法在启动时调用):
问题是当我忽略tvTime.setText(...)(将其变为// tvTime.setText(...))时,每秒钟会在LogCat中打印出以下数字。但是当我想将此数字设置为另一个线程中创建的TextView时,程序会崩溃。
有没有人有想法如何轻松解决这个问题?
以下是代码(该方法在启动时调用):
private void startTimerThread() {
Thread th = new Thread(new Runnable() {
private long startTime = System.currentTimeMillis();
public void run() {
while (gameState == GameState.Playing) {
System.out.println((System.currentTimeMillis() - this.startTime) / 1000);
tvTime.setText("" + ((System.currentTimeMillis() - this.startTime) / 1000));
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
th.start();
}
编辑:
最终,我搞定了。 以下是解决方案,供有兴趣的人参考。
private void startTimerThread() {
Thread th = new Thread(new Runnable() {
private long startTime = System.currentTimeMillis();
public void run() {
while (gameState == GameState.Playing) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvTime.setText(""+((System.currentTimeMillis()-startTime)/1000));
}
});
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
th.start();
}