关于线程调用Spring注解对象报空指针异常
2015-08-14 17:55
567 查看
本人刚接触线程方面,今天在写一个端口监控的时候遇到一个问题,就是在线程中,调用spring注入的对象时,报空指针异常.
而且只在这个类中报这个问题.
在controller类中,能正常运行,所以应该能排除注入失败或者配置错误的因素.
百思不得其解,暂时先记下问题,以免以后在遇到这类问题弄的手忙脚乱,解决之后再写上解决方案.
如果有知道问题所在的朋友,还请不吝赐教,万分感谢.
==============================我是分割线==================================
问题已解决,对于Servlet了解不够,看来需要好好的整理下这方面的知识。
问题的关键在于本人将该类的调用写在Servlet中,在web.xml中启动该servlet,导致Servlet执行时,Spring还未自动装配bean,
因此在注入对象并不存在,导致报空指针异常,目前的解决方式是在Servlet中加载Spring的bean配置,使之先于该Servlet执行,
再通过ClassPathXmlApplicationContext根据名称调用所需要的bean对象,传入该类
而且只在这个类中报这个问题.
在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>
相关文章推荐
- Ruby中的异常处理代码编写示例
- C#线程间不能调用剪切板的解决方法
- C#线程同步的三类情景分析
- C#子线程更新UI控件的方法实例总结
- MySQL抛出Incorrect string value异常分析
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法
- C#中线程同步对象的方法分析
- ASP.NET线程相关配置
- 浅析linux环境下一个进程最多能有多少个线程
- 再谈JavaScript线程
- 详解JavaScript中的异常处理方法
- C#实现终止正在执行的线程
- java程序中的延时加载异常及解决方案
- 解析Java线程同步锁的选择方法
- .NET(C#):Emit创建异常处理的方法