Java 第一个线程上的NullPointerException
编辑: 在做了您建议的所有更改后,问题仍然存在。调试器说lemma变量为null,但我应用的修复并没有使事情变得更好。因此,由于最后期限的问题,我决定从另一个角度来处理这个问题。谢谢大家的帮助。:) 我正在写一个小程序,一个Java 第一个线程上的NullPointerException,java,multithreading,nullpointerexception,Java,Multithreading,Nullpointerexception,编辑: 在做了您建议的所有更改后,问题仍然存在。调试器说lemma变量为null,但我应用的修复并没有使事情变得更好。因此,由于最后期限的问题,我决定从另一个角度来处理这个问题。谢谢大家的帮助。:) 我正在写一个小程序,一个NullPointerException让我发疯。我有两个类:SystemDir和Search。第一个是初始目录和搜索引理的封装。搜索类如下所示。简单地说,我希望一个线程搜索第一级目录,另一个线程扩展子目录。这就是我得到的例外。异常字符串为 Exception in thre
NullPointerException
让我发疯。我有两个类:SystemDir
和Search
。第一个是初始目录和搜索引理的封装。搜索
类如下所示。简单地说,我希望一个线程搜索第一级目录,另一个线程扩展子目录。这就是我得到的例外。异常字符串为
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)
线程“thread-0”java.lang.NullPointerException中的异常
在Search.searchFiles(Search.java:59)
搜索时。(Search.java:53)
在SystemDir.(SystemDir.java:61)
搜索$1.run(Search.java:45)
运行(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]);
}
}
}
}
公共类搜索{
私有线程t;
公共搜索(字符串[]子文件,最终字符串[]子文件,最终字符串引理){
t=新线程(新可运行(){
@凌驾
公开募捐{
对于(int i=0;i您没有包含所有代码
根据提供的信息:
在searchFiles
中,t
,子文件
或子文件[i]
为空。您尚未包含所有代码
根据提供的信息:
在searchFiles
中,t
,子文件
或子文件[i]
为空。通常,它会产生各种各样的问题,这些问题可能导致出现异常
像在构造函数中一样创建线程,将searchFiles
公开,并从客户端代码而不是从构造函数调用该方法
除此之外,您是否检查过:
子文件
不为空
子文件[i]
均不为空
引理
不为空
(必要时添加println语句)
正如@Gray所指出的,一个线程不能启动一次以上。通常,它会产生各种各样的问题,这可能是导致出现异常的原因
像在构造函数中一样创建线程,将searchFiles
公开,并从客户端代码而不是从构造函数调用该方法
除此之外,您是否检查过:
子文件
不为空
子文件[i]
均不为空
引理
不为空
(必要时添加println语句)
正如@Gray所指出的,你不能多次启动一个线程。你的代码本身没有多大意义
这使得很难发现错误
我建议使用Eclipse调试器,并检查哪个值是null
据我所知,您的问题在于递归到SystemDir
,您没有提供的代码。您的代码本身没有多大意义
这使得很难发现错误
我建议使用Eclipse调试器,并检查哪个值是null
据我所知,您的问题在于递归到SystemDir
,您没有提供的代码。在searchFiles
方法中,在循环中启动线程的意义是什么?是否希望在每次执行循环时运行线程?我认为您缺少了一些东西
检查您传递给构造函数的某个值是否为null。在您的searchFiles
方法中,在循环中启动线程的意义是什么?是否要在每次执行循环时运行线程?我认为您缺少了一些内容
检查您正在传递给构造函数的某些值是否为null。您未能发布SystemDir
的源代码,但堆栈跟踪表明其构造函数正在尝试创建一个新的搜索对象,而不是最初创建线程的对象
更具体地说,SystemDir构造函数中某个地方的新搜索(…)
表达式可能正在为子文件传递null
。是否有对File.list()
的调用,您可能还没有检查其是否返回空值?请注意list()
如果由于缺少权限或找不到目录等原因而无法列出目录,则返回null
此外,您似乎多次尝试启动同一个线程对象。如果子文件中有多个元素,则会导致非法线程状态异常
,您未能发布SystemDir
的源代码,但堆栈跟踪显示其构造函数正在尝试创建在最初创建线程的对象之外,再创建一个新的搜索对象
更具体地说,SystemDir构造函数中某个地方的新搜索(…)
表达式可能正在为子文件传递null
。是否有对File.list()
的调用,您可能还没有检查其是否返回空值?请注意list()
如果由于缺少权限或找不到目录等原因而无法列出目录,则返回null
此外,您似乎多次尝试启动同一个线程对象。如果存在多个元素,则会导致IllegalThreadStateException