日期:2014-05-20  浏览次数:20616 次

如何让主线程等待子线程执行后在运行。

                                            显示“数据正在读入......”
List   -----------> ---------Alert-----------------> -form   显示读取内容
                |                                                                           |
                |-------->     读取存储卡内容ReadFile----|
说明:当选中List菜单中的一个项目后,显示“数据正在读入....”Alert,同时读取存储卡,并却当alert返回后直接进入显示Form,从存储卡读取类返回一个Vector实例,其中保存了读出的内容。

读出的内容作为Form构造方法的一个参数。

读取存储卡需要另外开一个线程,如果在主线程中调用子线程的run()方法就会报如下错误。
Warning:   To   avoid   potential   deadlock,   operations   that   may   block,   such   as  
  networking,   should   be   performed   in   a   different   thread   than   the  
  commandAction()   handler

但是必须在Form构造前ReadFile类返回一个非空的Vector实例。
        //读取存储卡内容。。
        ReadFile   get   =   new   ReadFile();
        //启动线程
        get.start();
        //   如果运行run()方法将报以上错误。但如果不运行run()方法,得到的内容有时候为空。
        //get.run();
        //得到内容
        Vector   vector=get.getContent();
        //显示数据读入页面
        Alert   alert   =   new   Alert( " ",   "正在读入数据..... ",   null,null);
        alert.setTimeout(3000);
        //构造显示页面
        ViewForm   viewForm=new   ViewForm   (dis,this,vector);
        //alert   显示3秒后自动进入显示页面。
        dis.setCurrent(alert,viewForm);

高手指点一下如何实现理想的功能。

------解决方案--------------------
你可以放到一个线程中来做,只是用不同的状态来区分他们;
如果你想放到两个线程中来做,就做一个接口,读取的线程握住接口句柄,在主线程中实现接口方法,当读取完毕,则向接口发送一个消息,由主线程来处理
------解决方案--------------------
支持楼上的
------解决方案--------------------
Thread.join()
Waits for this thread to die.

在主线程中调用子线程的join,可使主线程阻塞等待子线程完成
------解决方案--------------------
//启动线程
get.start();
get.join();//阻塞等待子线程完成
------解决方案--------------------
子线程完了,主线程自动继续运行