我有一个User对象的ArrayList。
private ArrayList<User> users;
这是包含数组列表&#34; users&#34;的类的构造函数。 :
public CommunicationThread(Socket socket, ArrayList<User> users) {
super("CommunicationThread");
try {
// Initialize data fields
this.users = users;
System.out.println("Client connected : " + client_socket.getInetAddress().toString());
} catch(IOException e) {
System.out.println("Could not initialize communication properly. -- CommunicationThread.\n");
e.printStackTrace(client_out); // Also inform the client.
}
}
我写了一个程序&#34; search_user&#34;它会搜索给定用户名的用户。
private User search_user(String username) {
for(int i = 0; i < this.users.size(); i++) {
User found_user = this.users.get(i);
if(found_user.username.equals(username))
return found_user;
}
return new UserNotFound();
}
当我试图搜索用户时,它总是给我一个nullpointer异常。
Exception in thread "CommunicationThread"
java.lang.NullPointerException
at DirectoryService.CommunicationThread.search_user(CommunicationThread.java:92)
&#34;用户&#34;我在搜索时列表为空,但这应该只返回一个新的&#34; UserNotFound&#34;对象并不应该抛出nullpointer异常。
答案 0 :(得分:0)
简单地执行空检查并立即返回“UserNotFound”。
提示:编写一个日志语句来检查列表对象的空状态。
private User search_user(String username) {
if(this.users == null || this.users.size() == 0){
return new UserNotFound();
}
for(int i = 0; i < this.users.size(); i++) {
User found_user = this.users.get(i);
if(found_user.username.equals(username))
return found_user;
}
return new UserNotFound();
}
这是一个非常简单的修复方法。尝试调试代码。
答案 1 :(得分:0)
\Events::addListener('on_before_dispatch', function() {
$request = \Request::getInstance();
$page = \Page::getByPath($request->getPath()); // Get the real requested page
if ($page->isError()) { // If it doesn't exist
$path = new \Concrete\Core\Url\Components\Path($request->getPath());
$path = $path->prepend('en'); // prepend "/en" to the path, ex: "/path/to" becomes "/en/path/to"
$page = Page::getByPath($path);
if (!$page->isError) { // Make sure that this page actually exists
// This may not work, you might need to replace the actual \Request instance.
$request->setCurrentPage($page); // Set it to the requested page.
}
}
});
,但您正在执行的是对未初始化列表的分配(在您调用“搜索”之前发生)。
搜索调用UserNotFound
构造函数的代码,并看到您将CommunicationThread
值传递为null
。
解决方案:声明ArrayList<User> users
时将其初始化为空列表。
答案 2 :(得分:0)
您应首先检查用户是否为空:
private ArrayList<User> users;
答案 3 :(得分:0)
您似乎正在使用其他构造函数来创建.directive('pictures', function () {
return {
restrict: 'EA',
link: function (scope, element, attrs) {
var url = attrs.pictures;
element.css({
'background-image': 'url("' + url +'")', <-- Change here
'background-size' : 'cover'
});
}
};
});
的对象。而是做无用的CommunicationThread
检查并使你的代码变得丑陋,我建议在声明字段时初始化你的列表:
null