Here is the log after I click the cancel button:

DEBUG/dalvikvm(1299): Exception Ljava/lang/RuntimeException; from
Handler.java:94 not caught locally
WARN/dalvikvm(1299): threadid=15: thread exiting with uncaught
exception (group=0x4000fdf8)
ERROR/AndroidRuntime(1299): Uncaught handler: thread Thread-8 exiting
due to uncaught exception
ERROR/AndroidRuntime(1299): java.lang.RuntimeException: Can't create
handler inside thread that has not called Looper.prepare()
ERROR/AndroidRuntime(1299):     at
android.os.Handler.<init>(Handler.java:94)
ERROR/AndroidRuntime(1299):     at
android.widget.Toast.<init>(Toast.java:348)
ERROR/AndroidRuntime(1299):     at
android.widget.Toast.makeText(Toast.java:209)
ERROR/AndroidRuntime(1299):     at ciente.cl.AsyncLoadingMgrSample
$LoadingTask2.run(AsyncLoadingMgrSample.java:146)
ERROR/AndroidRuntime(1299):     at java.lang.Thread.run(Thread.java:
896)
INFO/Process(508): Sending signal. PID: 1299 SIG: 3
INFO/dalvikvm(1299): threadid=7: reacting to signal 3
INFO/dalvikvm(1299): DALVIK THREADS:
INFO/dalvikvm(1299): "Main" prio=5 tid=3 RUNNABLE
INFO/dalvikvm(1299):   | group="main" sCount=1 dsCount=0 s=1
obj=0x40010450
INFO/dalvikvm(1299):   | sysTid=496 nice=0 sched=0/0
handle=-1096934148
INFO/dalvikvm(1299):   at java.lang.Thread.interrupt(Thread.java:~747)
INFO/dalvikvm(1299):   at ciente.cl.AsyncLoadingMgrSample
$1$1.onCancel(AsyncLoadingMgrSample.java:72)
INFO/dalvikvm(1299):   at android.app.Dialog
$1.handleMessage(Dialog.java:508)
INFO/dalvikvm(1299):   at
android.os.Handler.dispatchMessage(Handler.java:80)
INFO/dalvikvm(1299):   at android.os.Looper.loop(Looper.java:91)
INFO/dalvikvm(1299):   at
android.app.ActivityThread.main(ActivityThread.java:3052)
INFO/dalvikvm(1299):   (break frame)
INFO/dalvikvm(1299):   at java.lang.reflect.Method.invokeNative(Native
Method)
INFO/dalvikvm(1299):   at java.lang.reflect.Method.invoke(Method.java:
356)
INFO/dalvikvm(1299):   at android.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:1547)
INFO/dalvikvm(1299):   at android.os.ZygoteInit.main(ZygoteInit.java:
1445)
INFO/dalvikvm(1299):   (break frame)
INFO/dalvikvm(1299):   at android.dalvik.NativeStart.main(Native
Method)
INFO/dalvikvm(1299):   (break frame)
INFO/dalvikvm(1299): "Thread-8" prio=5 tid=15 NATIVE
INFO/dalvikvm(1299):   | group="main" sCount=1 dsCount=0 s=0
obj=0x40060a90
INFO/dalvikvm(1299):   | sysTid=1357 nice=0 sched=0/0 handle=1346432
INFO/dalvikvm(1299):   at android.os.BinderProxy.transact(Native
Method)
INFO/dalvikvm(1299):   at
android.app.ActivityManagerProxy.handleApplicationError(ActivityManagerNative.java:
1441)
INFO/dalvikvm(1299):   at
android.os.RuntimeInit.crash(RuntimeInit.java:250)
INFO/dalvikvm(1299):   at android.os.RuntimeInit
$UncaughtHandler.uncaughtException(RuntimeInit.java:56)
INFO/dalvikvm(1299):   at
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:853)
INFO/dalvikvm(1299):   at
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:850)
INFO/dalvikvm(1299):   (break frame)
INFO/dalvikvm(1299): "Binder Thread #2" prio=5 tid=13 NATIVE
INFO/dalvikvm(1299):   | group="main" sCount=1 dsCount=0 s=0
obj=0x40021c38
INFO/dalvikvm(1299):   | sysTid=1312 nice=-10 sched=0/0 handle=1320328
INFO/dalvikvm(1299):   at android.dalvik.NativeStart.run(Native
Method)
INFO/dalvikvm(1299):   (break frame)
INFO/dalvikvm(1299): "Binder Thread #1" prio=5 tid=11 NATIVE
INFO/dalvikvm(1299):   | group="main" sCount=1 dsCount=0 s=0
obj=0x40020438
INFO/dalvikvm(1299):   | sysTid=1311 nice=-15 sched=0/0 handle=1317024
INFO/dalvikvm(1299):   at android.dalvik.NativeStart.run(Native
Method)
INFO/dalvikvm(1299):   (break frame)
INFO/dalvikvm(1299): "JDWP" daemon prio=5 tid=9 VMWAIT
INFO/dalvikvm(1299):   | group="system" sCount=1 dsCount=0 s=0
obj=0x400b4530
INFO/dalvikvm(1299):   | sysTid=1302 nice=0 sched=0/0 handle=1313496
INFO/dalvikvm(1299):   at android.dalvik.NativeStart.run(Native
Method)
INFO/dalvikvm(1299):   (break frame)
INFO/dalvikvm(1299): "Signal Catcher" daemon prio=5 tid=7 RUNNABLE
INFO/dalvikvm(1299):   | group="system" sCount=0 dsCount=0 s=0
obj=0x400b1e90
INFO/dalvikvm(1299):   | sysTid=1301 nice=0 sched=0/0 handle=1302384
INFO/dalvikvm(1299):   at android.dalvik.NativeStart.run(Native
Method)
INFO/dalvikvm(1299):   (break frame)
INFO/dalvikvm(1299): "HeapWorker" daemon prio=5 tid=5 VMWAIT
INFO/dalvikvm(1299):   | group="system" sCount=1 dsCount=0 s=0
obj=0x400b0670
INFO/dalvikvm(1299):   | sysTid=1300 nice=0 sched=0/0 handle=1299784
INFO/dalvikvm(1299):   at android.dalvik.NativeStart.run(Native
Method)
INFO/dalvikvm(1299):   (break frame)
INFO/CancelLoadingTask:Run(1299): loading task interruptted
VERBOSE/Toast(1299): SHOW: [EMAIL PROTECTED]
VERBOSE/Toast(1299): HANDLE SHOW: [EMAIL PROTECTED]
showing=false
VERBOSE/Toast(1299): ADD! [EMAIL PROTECTED] in
[EMAIL PROTECTED]
VERBOSE/Toast(1299): HIDE: [EMAIL PROTECTED]
VERBOSE/Toast(1299): HANDLE HIDE: [EMAIL PROTECTED]
showing=true
VERBOSE/Toast(1299): REMOVE! [EMAIL PROTECTED] in
[EMAIL PROTECTED]


On Apr 1, 3:02 pm, "Dan U." <[EMAIL PROTECTED]> wrote:
> Do you have a line number for this exception (Should be in logcat).
> I'd guess maybe it's the Toast show() call needing to be executed in a
> handler.
>
> On Mar 31, 11:15 pm, Rader <[EMAIL PROTECTED]> wrote:
>
> > What i want to do is starting a new thread when i click a button and
> > this new thread will do some long-time tasks. A loading dialog will be
> > shown before that thread starts and will be hidden when the thread
> > ends.If i wait until the thread finishes its job and ends normally,
> > everything will be OK. But if i cancel the loading dialog and
> > "interrupt" the thread in the cancel event handler of that dialog, an
> > UnCaughtExcetpion will be thrown.
>
> > Quote:
> > Can't create handler inside the thread that has not called
> > Looper.prepare()
>
> > Full code: AsyncLoadingMgrSample .java
>
> > Java:
>
> > package ciente.cl;
>
> > import java.util.concurrent.Callable;
> > import java.util.concurrent.CompletionService;
> > import java.util.concurrent.Executor;
> > import java.util.concurrent.ExecutorCompletionService;
> > import java.util.concurrent.FutureTask;
>
> > import android.app.Activity;
> > import android.app.ProgressDialog;
> > import android.content.DialogInterface;
> > import android.content.DialogInterface.OnCancelListener;
> > import android.os.Bundle;
> > import android.os.Handler;
> > import android.util.Log;
> > import android.view.View;
> > import android.view.View.OnClickListener;
> > import android.widget.Button;
> > import android.widget.EditText;
> > import android.widget.Toast;
>
> > /**
> >  * @author rader
> >  *
> >  */
> > public class AsyncLoadingMgrSample extends Activity {
>
> >      private final AsyncLoadingMgr mgr=new AsyncLoadingMgr(this);
> >      protected Runnable cancelLoding;
> >      protected FutureTask<?> loading;;
> >      ProgressDialog mProgDlg;
>
> >      final public FinishlLoadingTask finishLoadingTask=new
> > FinishlLoadingTask();
>
> >      /** Called when the activity is first created. */
> >      @Override
> >      public void onCreate(Bundle icicle) {
> >           super.onCreate(icicle);
> >           setContentView(R.layout.asyncloadingmgrsample);
>
> > //        loading=new FutureTask<String>(new LoadingTask(this));
> > //        cancelLoding=new CancelLoadingTask();
>
> >           final Handler handler=new Handler();
>
> >           Button btnAsyncLoad=(Button)findViewById(R.id.btnAsyncLoad);
> >           btnAsyncLoad.setOnClickListener(new OnClickListener(){
>
> >                @Override
> >                public void onClick(View arg0){
> >                     EditText
> > txt=(EditText)findViewById(R.id.txtAsyncLoad);
>
> >  //                    Executor
> > executor=java.util.concurrent.Executors.newFixedThreadPool(1);
> >  //                    CompletionService<String> completionService =
> >  //                       new
> > ExecutorCompletionService<String>(executor);
> >                     txt.setText("start task...");
> >                     try {
> > //                       Callable task=new LoadingTask(handler);
> >                          final Thread loadingThread=new Thread(new
> > LoadingTask2(handler));
> >                          loadingThread.start();
>
> >                          mProgDlg =
> > ProgressDialog.show(AsyncLoadingMgrSample.this, null,
> >                                    "Please wait while loading...",
> > true, true);
> >                          mProgDlg.setCancelListener(new
> > OnCancelListener(){
>
> >                               @Override
> >                               public void onCancel(DialogInterface
> > arg0) {
> >                                    loadingThread.interrupt();
>
> > //                                 while(!
> > loadingThread.isInterrupted()){
> > //
> > //                                 }
>
> > Toast.makeText(AsyncLoadingMgrSample.this,"loading task
> > interruptted",Toast.LENGTH_LONG).show();
>
> > Log.i("CancelLoadingTask:Run","loading task interruptted");
> >                                    EditText
> > txt=(EditText)findViewById(R.id.txtAsyncLoad);
> >                                    txt.setText("loading task
> > interruptted");
>
> >                               }
>
> >                          });
> > //                       completionService.submit(task);
> >                      txt.setText("wait for the task ending....");
> >                     } catch (Exception e) {
> >                          // TODO Auto-generated catch block
> >                          e.printStackTrace();
> >                          Log.e("CancelLoadingTask:Run","loading task
> > canceled["+e.toString());
> >                     }
>
> >                }
>
> >           });
> >      }
>
> >      class CancelLoadingTask implements Runnable{
>
> >           @Override
> >           public void run() {
> >                if(mProgDlg!=null)
> >                     mProgDlg.dismiss();
> >                EditText txt=(EditText)findViewById(R.id.txtAsyncLoad);
> >                txt.setText("loading task canceled");
> >                Toast.makeText(AsyncLoadingMgrSample.this,"loading task
> > canceled",Toast.LENGTH_LONG).show();
> >                Log.i("CancelLoadingTask:Run","loading task canceled");
>
> >           }
>
> >      }
> >      class FinishlLoadingTask implements Runnable{
>
> >           @Override
> >           public void run() {
> >                if(mProgDlg!=null)
> >                     mProgDlg.dismiss();
> >                EditText txt=(EditText)findViewById(R.id.txtAsyncLoad);
> >                txt.setText("loading task finshed");
> >                Toast.makeText(AsyncLoadingMgrSample.this,"loading task
> > finshed",Toast.LENGTH_LONG).show();
> >                Log.i("FinishlLoadingTask:Run","loading task finshed");
>
> >           }
>
> >      }
> >      class LoadingTask2 implements Runnable{
> >           private Handler localHandler;
> >           private Handler remoteHandler;
> >           public LoadingTask2(Handler remotehandler){
> >                this.remoteHandler=remotehandler;
> >                localHandler=new Handler();
> >           }
> >           public Handler getLocalHandler(){
> >                return localHandler;
> >           }
> >           @Override
> >           public void run() {
> >                try {
> >                     Thread.sleep(10000);
> > //                  if(Thread.interrupted())
> > //                       remoteHandler.post(new CancelLoadingTask());
> > //                  else
> > //                       remoteHandler.post(new FinishlLoadingTask());
>
> > remoteHandler.post(AsyncLoadingMgrSample.this.finishLoadingTask);
> >                } catch (InterruptedException e) {
> >                     Toast.makeText(AsyncLoadingMgrSample.this,"loading
> > task error",Toast.LENGTH_LONG).show();
> >                     Log.i("LoadingTask2:Run","loading task error");
> >                }
>
> >           }
>
> >      }
>
> > [quote]
>
> > "remoteHandler" in class LoadingTask2 means a Handler in UI thread.
>
> >
Thanks for help in advance!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
Announcing the new M5 SDK!
http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to