Multithreading 在一个线程中更改文本只能工作一次,然后就会爆炸
我正在制作一个简单的应用程序,每隔几秒钟播放两个快速mp3文件。 我用一根线来计时 在线程中,我对名为myquick的xml文件执行了一个setText,效果很好,但在等待10秒后,当调用下一个mp3文件时,下一个setText不起作用,并强制关闭。当我注释掉有问题的代码时 //mytxt.setText(“我们现在结束”) 整个线程遍历了它的步调,然后愉快地返回到listview菜单 问题。。。如何在屏幕上更改文本?我怎样才能做到这一点 这是我的两个相关文件Multithreading 在一个线程中更改文本只能工作一次,然后就会爆炸,multithreading,settext,Multithreading,Settext,我正在制作一个简单的应用程序,每隔几秒钟播放两个快速mp3文件。 我用一根线来计时 在线程中,我对名为myquick的xml文件执行了一个setText,效果很好,但在等待10秒后,当调用下一个mp3文件时,下一个setText不起作用,并强制关闭。当我注释掉有问题的代码时 //mytxt.setText(“我们现在结束”) 整个线程遍历了它的步调,然后愉快地返回到listview菜单 问题。。。如何在屏幕上更改文本?我怎样才能做到这一点 这是我的两个相关文件 <?xml version=
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/ses1text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_gravity="center"
android:gravity="center"
android:textColor="@android:color/white"
android:text=" "
android:textSize="25dp" >
</TextView>
</RelativeLayout>
错误的堆栈跟踪是???您不能在一个简单的线程中更改UI小部件。阅读此内容或使用AsyncTask类并将您的UI更改放入
onProgressUpdate
方法中。Rob013在不到30秒内回答了此问题。。。哇!我印象深刻。我去了链接建议,实现了代码,现在我的文字修改谢谢!
public class MyQuick extends Activity {
MediaPlayer mp;
Thread threetimer;
@Override
public void onCreate(Bundle twothings) {
// TODO Auto-generated method stub
super.onCreate(twothings);
setContentView(R.layout.myquick);
threetimer = new Thread(){
public void run(){
try{
TextView mytxt = (TextView) findViewById(R.id.ses1text);
mp = MediaPlayer.create(MyQuick.this, R.raw.start);
mytxt.setText("Let's start in 10 seconds");
// it works here
mp.start();
sleep(5000);
mp.release();
sleep(10000);
// HERE IS THE PROBLEM
mp = MediaPlayer.create(MyQuick.this, R.raw.end);
mytxt.setText("We will now end");
//it doesn't work here,
//it closes this portion of the app and goes back to the listview
//needless to say the text does not change at all
mp.start();
sleep(5000);
mp.release();
}catch (InterruptedException e){
e.printStackTrace();
}finally{
Intent myIntent = new Intent("com.my.quick.MENU");
startActivity(myIntent);
}
}
};
threetimer.start();
}
}