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

本人刚接触线程方面,今天在写一个端口监控的时候遇到一个问题,就是在线程中,调用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:[email protected] 
 * @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 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=====================
Exception in thread "Thread-0" java.lang.NullPointerException

 at com.socket.client.RunSocket$1.run(RunSocket.java:44)

 at java.lang.Thread.run(Thread.java:745)


你可能感兴趣的:(spring,Thread)