java - 第一个线程出现 NullPointerException

标签 java multithreading nullpointerexception

编辑:

在进行了您建议的所有更改后,问题仍然存在。调试器说引理变量为空,但我应用的修复并没有使事情变得更好。所以,由于截止日期的问题,我决定从另一个角度来解决这个问题。感谢大家的帮助。 :)

我正在写一个小程序,NullPointerException 把我逼疯了。我有两个类:SystemDirSearch。第一个只是初始目录和搜索引理的封装。 Search 类如下所示。简而言之,我希望一个线程搜索一级目录,另一个线程搜索子目录。那就是我得到异常(exception)的地方。异常字符串是

Exception in thread "Thread-0" java.lang.NullPointerException
at Search.searchFiles(Search.java:59)
at Search.<init>(Search.java:53)
at SystemDir.<init>(SystemDir.java:61)
at Search$1.run(Search.java:45)
at java.lang.Thread.run(Thread.java:679)

这 3 个点是最终循环内的 t.start()、searchFiles 方法调用、上面的一些行以及 run 方法中的新 SystemDir 调用。你能帮帮我吗?

public class Search {
   private Thread t;

   public Search(String[] subFiles, final String[] subDir, final String lemma) {
       t = new Thread(new Runnable() {
           @Override
           public void run() {
               for(int i=0;i<subDir.length;i++) {
                   try {
                       System.out.println(subDir[i]);
                       new SystemDir(subDir[i], lemma);
                   }
                   catch (NoDirectoryException ex) {
                       Logger.getLogger(Search.class.getName()).log(Level.SEVERE, null, ex);
                   }
               }
           }
       });

       searchFiles(subFiles,lemma); 
    }

    private void searchFiles(String[] subFiles, String lemma) {
       for(int i=0;i<subFiles.length;i++) {
            t.start();
            if(subFiles[i].contains(lemma)) {
                System.out.println(subFiles[i]);                    
            }
        }
    }
}

最佳答案

通常,never start a thread from a constructor .它会产生各种问题,这些问题可能是您获得异常的原因。

像在构造函数中一样创建线程,使 searchFiles 公开并从客户端代码而不是从构造函数中调用该方法。

除此之外,您是否检查过:

  • subFiles 不为空
  • subFiles[i] 都不为空
  • 引理不为空

(必要时添加 println 语句)

正如@Gray 所指出的,您不能多次启动一个线程。

关于java - 第一个线程出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482087/

相关文章:

java - 创建一个与ArrayList具有类似功能的新类,添加值时出错?

java - EDT 违规是否可能导致外部软件出现 NullPointerException?

java - JPA/Hibernate : JPA Relationship, 过滤 NULL 值

java - Android:加载库并仅将其用于开发分支而不是发布

java - 通过 Java Web Start (JNLP) 启动的小程序启动两次

java - 为什么我不能通过从另一个类调用方法来使用 JavaFX 文本字段生成 map ?

java - CompletableFuture : after async call, 当前线程中的处理结果

javascript - 多线程 Nashorn : o. constructor === o.constructor gives false

python - ToasterBox 的问题,你能 join() 一个计时器或强制一个线程等待计时器在 python 中完成吗

java - getPlacesUrl(params[0]) 上出现 NullPointerException