普通网友 2015-10-29 12:41
浏览 2309

关于java多线程操作invokeAll空指针的问题

求救各位大神:

 public static void threadTestAll(String dirName) {
        long start = System.currentTimeMillis();
        ExecutorService pool = Executors.newFixedThreadPool(30);
        List<Callable<String>> tasks = new ArrayList<Callable<String>>();
        File dir = new File(dirName);
        for(File f:dir.listFiles(new myFilter())){
            myTask t = new ThreadTest2().new myTask(f.getAbsolutePath());
            tasks.add(t);
        }
        try {
            List<Future<String>> r = pool.invokeAll(tasks);
            for (Future<String> f : r)
              {
                if(f != null){
                    System.out.println(f);
                    System.out.println("task result=" + f.get());
                }
              }
                pool.shutdown();
                long end = System.currentTimeMillis();
                System.out.println("测试用了"+(end-start)+"毫秒");
        } catch (Exception e) {
            System.out.println("here");
            e.printStackTrace();
        } 
    }
 class myTask implements Callable<String> {
        final String fileName;

        public myTask(String fileName) {

            this.fileName = fileName;
        }
        @Override
        public String call() throws Exception {
            System.out.println("线程开始查找"+fileName);
            List<String> l = FileUtils.serachFileNames(fileName, "[七七电视www.77ds.com]蚁人TS清晰中字.mp4", false);
            if(l.size() != 0){
//              System.out.println(l.get(0));
                System.out.println(l.get(0));
                return l.get(0);
            }
                return "";
//           throw new Exception("没找到");
        }

    }

我的两段代码,没有发现任何有空指针异常的情况,单步调试也不知道哪出问题了,在这里 System.out.println(f);
System.out.println("task result=" + f.get()); 打印也可以把对象打印出来,但不知道为啥,总有一个对象get的时候出错了,报空指针问题,求大神指教 这是结果

 线程开始查找d:\$RECYCLE.BIN
线程开始查找d:\7450
线程开始查找d:\android
线程开始查找d:\360WiFi
线程开始查找d:\cha
线程开始查找d:\360Downloads
线程开始查找d:\maven
线程开始查找d:\opt
线程开始查找d:\Program Files (x86)
线程开始查找d:\DOWNLOAD
线程开始查找d:\RJ
线程开始查找d:\updateEdb
线程开始查找d:\work
线程开始查找d:\program
线程开始查找d:\kinggsoft
线程开始查找d:\Program Files
线程开始查找d:\迅雷下载
线程开始查找d:\shuju
线程开始查找d:\Youku Files
线程开始查找d:\System Volume Information
线程开始查找d:\备份
d:\迅雷下载\新建文件夹\[七七电视www.77ds.com]蚁人TS清晰中字.mp4
java.util.concurrent.FutureTask@6ef0eed6
task result=
java.util.concurrent.FutureTask@bd05c81
task result=
java.util.concurrent.FutureTask@1c691f36
task result=
java.util.concurrent.FutureTask@398020cc
task result=
java.util.concurrent.FutureTask@ae94e92
task result=
java.util.concurrent.FutureTask@5b2558d6
task result=
java.util.concurrent.FutureTask@70eb7859
task result=
java.util.concurrent.FutureTask@732a54f9
task result=
java.util.concurrent.FutureTask@6030e280
task result=
java.util.concurrent.FutureTask@296672d6
task result=
java.util.concurrent.FutureTask@4fd54d6
task result=
java.util.concurrent.FutureTask@13ccb029
task result=
java.util.concurrent.FutureTask@63415de6
task result=
java.util.concurrent.FutureTask@587bd9f2
task result=
java.util.concurrent.FutureTask@2b21cc40
task result=
java.util.concurrent.FutureTask@37e893df
here
java.util.concurrent.ExecutionException: java.lang.NullPointerException
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
    at java.util.concurrent.FutureTask.get(FutureTask.java:83)
    at codeTest.ThreadTest2.threadTestAll(ThreadTest2.java:48)
    at codeTest.ThreadTest2.main(ThreadTest2.java:30)
Caused by: java.lang.NullPointerException
    at codeTest.ThreadTest2$myTask.call(ThreadTest2.java:91)
    at codeTest.ThreadTest2$myTask.call(ThreadTest2.java:1)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 关于#qt#的问题:Qt代码的移植问题
    • ¥50 求图像处理的matlab方案
    • ¥50 winform中使用edge的Kiosk模式
    • ¥15 关于#python#的问题:功能监听网页
    • ¥15 怎么让wx群机器人发送音乐
    • ¥15 fesafe材料库问题
    • ¥35 beats蓝牙耳机怎么查看日志
    • ¥15 Fluent齿轮搅油
    • ¥15 八爪鱼爬数据为什么自己停了
    • ¥15 交替优化波束形成和ris反射角使保密速率最大化