显示“数据正在读入......”
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();//阻塞等待子线程完成
------解决方案--------------------------------------------------------
子线程完了,主线程自动继续运行