您的位置:首页 > 编程语言 > Java开发

关于线程调用Spring注解对象报空指针异常

2015-08-14 17:55 567 查看
本人刚接触线程方面,今天在写一个端口监控的时候遇到一个问题,就是在线程中,调用spring注入的对象时,报空指针异常.

而且只在这个类中报这个问题.

在controller类中,能正常运行,所以应该能排除注入失败或者配置错误的因素.

百思不得其解,暂时先记下问题,以免以后在遇到这类问题弄的手忙脚乱,解决之后再写上解决方案.

如果有知道问题所在的朋友,还请不吝赐教,万分感谢.

==============================我是分割线==================================

问题已解决,对于Servlet了解不够,看来需要好好的整理下这方面的知识。

问题的关键在于本人将该类的调用写在Servlet中,在web.xml中启动该servlet,导致Servlet执行时,Spring还未自动装配bean,

因此在注入对象并不存在,导致报空指针异常,目前的解决方式是在Servlet中加载Spring的bean配置,使之先于该Servlet执行,

再通过ClassPathXmlApplicationContext根据名称调用所需要的bean对象,传入该类

package com.socket.client;

import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.socket.model.RequestCommand;
import com.socket.server.SocketServer;
import com.socket.service.RequestCommandService;

/**
* 启动端口监听入口
* @author  JQ.Wang   E-mail:wang53400487@hotmail.com
* @date 创建时间:2015年8月14日 下午3:46:22
* @version 1.0
* @parameter
* @since  JDK1.7
* @return
*/
@Controller
public class RunSocket {

protected static final Logger log=Logger.getLogger(RunSocket.class);

private int port = 0;

@Autowired
private RequestCommandService requestCommandService;

public void invoke(){
new Thread(new Runnable() {

@Override
public void run() {
System.out.println("=============================im here=====================");

System.out.println(requestCommandService);

List<RequestCommand> rcList=requestCommandService.findAllPort();
log.info("===========================将会启动监听的端口数量为:   "+rcList.size());
if (rcList.isEmpty()) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (RequestCommand requestCommand : rcList) {
//把当前的端口号覆盖port
port=requestCommand.getServer_port();
log.info("===========================正在启动的端口是:     "+port);
new Thread(new Runnable() {
@Override
public void run(){
log.info("===========================正在启动的端口是:     xxxxxx"+port);
new SocketServer().NioServer(port);
}
}).start();
}
}
}).start();
}
}

异常信息:
=============================im here=====================
<span style="color:#ff9966;">Exception in thread "Thread-0" java.lang.NullPointerException<pre name="code" class="java"></span>
<span style="white-space:pre"> </span>at com.socket.client.RunSocket$1.run(RunSocket.java:44)
</span>
<span style="white-space:pre"> at java.lang.Thread.run(Thread.java:745)</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息