Java 不幸的是,应用程序名称已停止
我是Java新手,我正在尝试使用eclipse和插件为Android编写一个简单的应用程序。 代码如下:Java 不幸的是,应用程序名称已停止,java,android,Java,Android,我是Java新手,我正在尝试使用eclipse和插件为Android编写一个简单的应用程序。 代码如下: package com.example.pushthebutton; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.widget.TextV
package com.example.pushthebutton;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
int counter = 30;
TextView label;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int delay = 0;
int period = 1000;
Timer timer = new Timer();
label = (TextView) findViewById(R.id.textView1);
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
label.setText(String.valueOf("Time left: "));
counter--;
}
}, delay, period);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
在模拟器中运行它之后,它说:不幸的是,app name已经停止了。
日志:
我是Java新手。。我不知道它可能是什么。您不能从与UI线程不同的线程更新每个视图: 以这种方式更改代码:
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
runOnUiThread(new Runnable()
public void run() {
label.setText(String.valueOf("Time left: "));
counter--;
}
));
}
}, delay, period);
}
通过这种方式,您要求Android在UI线程上执行setText调用
例外只有创建视图层次结构的原始线程才能接触其视图
你不能这样做
label.setText(String.valueOf("Time left: "));
runOnUiThread(new Runnable() {
public void run() {
//Update UI Here
}
});
像这样做
label.setText(String.valueOf("Time left: "));
runOnUiThread(new Runnable() {
public void run() {
//Update UI Here
}
});
或处理程序来执行此操作
实例
试试这个:
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
label.setText(String.valueOf("Time left: "));
counter--;
}
}
}
}, delay, period);
您正在从非UI线程(即计时器)修改UI线程。谢谢:您能给我举个例子吗?像个魔咒一样工作:。接受:谢谢!您不需要使用String.valueOfTime left:。时间还剩:已经是一根弦了。@Unholy Sampler是的,我当时不知道runOnUiThread的事,所以我想我应该投下它或者别的什么。