[size=large][color=indigo]老师布置的作业是用java编写一个程序实现文件搜索,这个没有多大问题,界面也画好了,功能也实现了,
但是要搜索如C盘东西很多的大目录时候,就会由于运算时间的原因,点下去“搜索按钮”,其他的按钮就会不能用
怎样用多线程解决这个问题呢?
而且,搜索c盘时想要点击按钮停止搜索,该怎样编写代码呢?
还有,怎样才能让搜索出来的内容逐条显示在label里呢??就像安装软件时左下方那个状态栏上快速显示当前正在复制的文件一样??
请指教[/color][/size]
像你所说的使用多线程机制是完全可以实现的。
在主线程基础上建立一个子线程A负责搜索文件及目录。
在线程A执行搜索期间,主线程并不往下执行,而是一直等到子线程A执行完搜索后才结束,在此期间,主线程定时循环做两件事情,一件事是查看搜索结果和搜索进度(搜索结果和搜索精度的相关变量在主线程中声明,然后传入子线程A,这样主线程即可获得),第二件事是监听鼠标事件,如果出发“停止”按钮,则终止线程A。
请看下面的参考实现代码,希望对楼主有所帮助
//主线程(也就是执行计算进入的线程)
// 主线程监控整体运行情况
。。。。。。。。。
search_result = new ArrayList();
SearchTread thread_A = new SearchTread()
thread_A.setSearch_result(search_result);
while (true) {
Thread curThread = Thread.currentThread();
synchronized (curThread) {
search_result = thread_A.getSearch_result();
this.show_result();
if (!thread_A.isAlive()) //子线程A是否存活
break;
Thread.sleep(2000);
}
}
。。。。。。。。
//子线程A
public class SearchTread extends Thread
{
private ArrayList search_result
public void run()
{
..................//search the file
}
}