编辑:
在进行了您建议的所有更改后,问题仍然存在。调试器说引理变量为空,但我应用的修复并没有使事情变得更好。所以,由于截止日期的问题,我决定从另一个角度来解决这个问题。感谢大家的帮助。 :)
我正在写一个小程序,NullPointerException
把我逼疯了。我有两个类:SystemDir
和 Search
。第一个只是初始目录和搜索引理的封装。 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/