Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在一个线程中更改文本只能工作一次,然后就会爆炸_Multithreading_Settext - Fatal编程技术网

Multithreading 在一个线程中更改文本只能工作一次,然后就会爆炸

Multithreading 在一个线程中更改文本只能工作一次,然后就会爆炸,multithreading,settext,Multithreading,Settext,我正在制作一个简单的应用程序,每隔几秒钟播放两个快速mp3文件。 我用一根线来计时 在线程中,我对名为myquick的xml文件执行了一个setText,效果很好,但在等待10秒后,当调用下一个mp3文件时,下一个setText不起作用,并强制关闭。当我注释掉有问题的代码时 //mytxt.setText(“我们现在结束”) 整个线程遍历了它的步调,然后愉快地返回到listview菜单 问题。。。如何在屏幕上更改文本?我怎样才能做到这一点 这是我的两个相关文件 <?xml version=

我正在制作一个简单的应用程序,每隔几秒钟播放两个快速mp3文件。 我用一根线来计时

在线程中,我对名为myquick的xml文件执行了一个setText,效果很好,但在等待10秒后,当调用下一个mp3文件时,下一个setText不起作用,并强制关闭。当我注释掉有问题的代码时

//mytxt.setText(“我们现在结束”)

整个线程遍历了它的步调,然后愉快地返回到listview菜单

问题。。。如何在屏幕上更改文本?我怎样才能做到这一点

这是我的两个相关文件

<?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();

        }
        }