猿问

无法在未调用Looper.prepare()的线程内创建处理程序

我有一个活动,并在那里上了一堂课。


text=new Dynamictext(...);

text.setText("txt");

在我的DynamicText Java中,我有以下代码:


public void setText(String text) {

    this.text=text;

    new asyncCreateText().execute();

    //this.createText(text);

}


//private Handler handler = new Handler();


private class asyncCreateText extends AsyncTask<Void, Void, Void> 

{

    @Override

    protected Void doInBackground(Void... unused) {

        return null;

    }


    @Override

    protected void onPostExecute(Void unused) {


    }

}

我得到:


ERROR / AndroidRuntime(5176):原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序


如何处理此错误?


ERROR/AndroidRuntime(5370): java.lang.ExceptionInInitializerError

ERROR/AndroidRuntime(5370):     at com.l.start.DynamicText.setText(DynamicText.java:125)

ERROR/AndroidRuntime(5370):     at com.l.start.OpenGLRenderer.initfonts(OpenGLRenderer.java:168)

ERROR/AndroidRuntime(5370):     at com.l.start.OpenGLRenderer.init(OpenGLRenderer.java:119)

ERROR/AndroidRuntime(5370):     at com.l.start.OpenGLRenderer.onSurfaceChanged(OpenGLRenderer.java:90)

ERROR/AndroidRuntime(5370):     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1120)

ERROR/AndroidRuntime(5370):     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:975)


ERROR/AndroidRuntime(5370): Caused by: java.lang.RuntimeException: 

    Can't create handler inside thread that has not called Looper.prepare()

ERROR/AndroidRuntime(5370):     at android.os.Handler.<init>(Handler.java:121)

ERROR/AndroidRuntime(5370):     at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)

ERROR/AndroidRuntime(5370):     at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)

ERROR/AndroidRuntime(5370):     at android.os.AsyncTask.<clinit>(AsyncTask.java:152)

ERROR/AndroidRuntime(5370):     ... 6 more


鸿蒙传说
浏览 469回答 3
3回答

拉风的咖菲猫

您可以通过这种方式在后台线程中创建处理程序private void createHandler() {&nbsp; &nbsp; &nbsp; &nbsp; Thread thread = new Thread() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Looper.prepare();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;final Handler handler = new Handler();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;handler.postDelayed(new Runnable() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Do Work&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; handler.removeCallbacks(this);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Looper.myLooper().quit();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, 2000);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Looper.loop();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; thread.start();&nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Android
我要回答