java.lang.NullPointerException的可能原因及处理.doc

合集下载

处理空指针异常的七种方法

处理空指针异常的七种方法

处理空指针异常的七种方法处理空指针异常(NullPointerException)的方法有很多种,主要取决于异常产生的原因和上下文。

以下是一些常见的处理方式:1.检查并处理可能的空值:这是处理空指针异常的最基本方式。

在访问对象的属性或方法之前,先检查对象是否为null。

如果是null,就进行适当的处理,例如返回一个默认值或者抛出一个更有意义的异常。

例如:String str = getSomeString();int length = (str != null) ? str.length() : 0;2.使用Optional类:Java 8引入了Optional类,可以更好地处理可能为null的情况。

使用Optional可以避免空指针异常,并且使代码更易于理解和维护。

例如:Optional<String> optionalStr = Optional.ofNullable(getSomeString());int length = optionalStr.map(String::length).orElse(0);3.使用异常处理:如果某些情况下空指针异常不可避免,可以使用try-catch语句来捕获并处理它。

在catch块中,可以记录日志、抛出自定义异常或者进行其他处理。

例如:try {// 可能会抛出NullPointerException的代码块} catch (NullPointerException e) {// 处理空指针异常的代码块,例如记录日志、抛出自定义异常等}4.重构代码:如果空指针异常是由于代码结构或者设计问题引起的,那么可能需要重构代码来避免这种异常。

例如,通过使用设计模式、创建更清晰的API或者封装可能为null的对象等方法。

5.利用IDE的帮助:许多集成开发环境(IDE)如IntelliJ IDEA或Eclipse都有强大的代码分析工具,可以帮助识别并预防空指针异常。

java.lang.NullPointerException错误处理方法及原因分析

java.lang.NullPointerException错误处理方法及原因分析

3.把数据库文件给导入到了SQL SERVER(或者其它数据库系统)里面。并且数据库系统正在运 行。 4.添加了数据源。 5.数据库源文件的系统类型匹配(不匹配重新建立数据库,源码里面一般含有数据库的表结构及内 容。),且数据库的连接密码正确。 6.JDBC驱动文件(或者其它)存在且放在tomcat的lib目录下面。 (msbase.jar,mssqlserver.jarmsutil.jar)
4.win+R->odbcad32-》回车-》添加-》选择SQL SERVER ->数据源名称应用数据库文件的名称。服 务器一般是 (local)->使用用户登录-》 填入sa +密码-》更改默认数据库为添加的-》下一步-》完成-》确定。
5.数据库系统类型是否匹配可在网站源码-》src-》...-》toolsbean-》DB.java(这里指数据库 连接的源码文件)找到这样一句 private final String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_Blog";这里就可以看到数据库 是SQL SERVER 以及连接用户名密码。private final String userName = "sa";private final String password = "sa";将其修改为你的。 但是我们这里只是修改的源码。这还不够。把改好的DB.java放到C盘根目录。启动cmd cd \ 命令 切换到C根目录。 用javac DB.java生成一个DB.class。把这个文件复制到WEB-INF->classes->....->toolsbean下 面替换原来的DB.class

新人踩坑的一天——springboot注入mapper时出现java.lang.NullP。。。

新人踩坑的一天——springboot注入mapper时出现java.lang.NullP。。。

新⼈踩坑的⼀天——springboot注⼊mapper时出现ng.NullP。

来公司的第⼆周接到了定时任务的开发需求:每天早上⼗点发送⽤户报表邮件。

校招新⼈菜鸟没做过这玩意有些懵(尴尬)于是决定分步写,从excel导出->邮件发送->定时器实现->mapper层返回集接收,前⼏步都没啥问题,都在service层,可以⽤main⽅法单独测试下,可以发送邮件,但是通过service调⽤mapper时问题就来了——菜鸟踩坑了,抛出ng.NullPointerException,下图是代码:@Component@EnableScheduling@Service("cronTaskService")public class CronTaskServiceImpl implements CronTaskService {@Resourceprivate ExportExcelServiceImpl exportExcelService;@Resourceprivate MailSendServiceImpl mailSendService;private final static Logger log = LoggerFactory.getLogger(CronTaskServiceImpl.class);private static int Count = 0;@Scheduled(cron = "*/10 * * * * ?")@Overridepublic void out(){new ExportExcelServiceImpl().exportExcel("zhoubaobiao1");//String filePath = exportExcelService.exportExcel("周报表" + Count++ + ".xls");//mailSendService.sendEmail(filePath);("-----------success-------\n");}}问了组内的前辈(应该也是没做⼏年),问题解决不了,定位不对。

java中常见的NullPointerException异常

java中常见的NullPointerException异常

java中常见的NullPointerException异常下面列出了我们学习java时常出现的NullPointerException异常,以及它的解决办法1,空指针错误ng.NullPointerException 使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long)一般不会引起空指针异常。

由此可见,空指针异常主要跟与对象的操作相关。

下面先列出了可能发生空指针异常的几种情况及相应解决方案:不管对象是否为空就直接开始使用。

(JSP)代码段1:out.println(request.getParameter("username"));描述:代码段1的功能十分简单,就是输出用户输入的表域"username"的值。

说明:看上去,上面的语句找不出什么语法错误,而且在大多数情况下也遇不到什么问题。

但是,如果某个用户在输入数据时并没有提供表单域"username"的值,或通过某种途径绕过表单直接输入时,此时request.getParameter("username")的值为空(不是空字符串,是空对象null。

),out对象的println方法是无法直接对空对象操作,因此代码段1所在的JSP页面将会抛出"ng.NullPointerException"异常。

即使对象可能为空时,也调用ng.Object或Object对象本身的一些方法如toString(), equals(Object obj)等操作。

(JSP)代码段2:String userName =request.getParameter("username");If (userName.equals("root")) {....}描述:代码段2的功能是检测用户提供的用户名,如果是用户名称为"root"的用户时,就执行一些特别的操作。

java的常见问题及解决方法

java的常见问题及解决方法

1."mons.collections.SequencedHashMap"'s signer information does not match signer information of other classes in the same package这是由于struts提供的commons-beanutils.jar和hibernate提供的commons-collections.jar冲突成的,可以从spring提供的lib中找到这个两个jarng.IllegalStateException: No data type for node:org.hibernate.hql.ast.tree.IdentNode用hql 时,忘了给表名加别名,如select p from Position,应该是select p from Position p3.The Server didn 't send back a proper XML response用FCKEditor时原因:解析不了xml文件解决方法:情况一:web.xml的配置是否正确,具体查看《FCKEditor使用指南.pdf》,还有fckeditor自带的几个jar 包情况二:加入serializer.jar,xalan.jar情况三:把项目下的fckeditor包删了,重新加入一遍.eclipse.swt.SWTError: No more handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]SWTError:没有更多的处理[未知Mozilla的路径(MOZILLA_FIVE_HOME未设置)]环境:linux下运行swt程序(我出现此问题是,在linux下嵌套浏览器)原因:firefox版本不一致解决:重装一个firefox,并设置相关变量5.Exception in thread "main" org.eclipse.swt.SWTError: No more handles [Could not detect registered XULRunner to use]环境:用XULRunner 在java application中嵌套浏览器原因:没有注册XULRunner解决:window下环境中,在程序中加入,如(第二个参数是下载解压后的存放路径):static{System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "C:\\xulrunner");}6.Exception in thread "main" ng.UnsatisfiedLinkError: noswt-win32-3536 or swt-win32 in swt.library.path, java.library.path or the jar file环境:用DJ Natvie Swing时,在java application中嵌套浏览器,且在windows环境下运行正常,但在linux下却包此异常原因:windows下与linux下使用的swt jar包不一样解决:在windows下用swt-3.5M6-win32-win32-x86.jar,在linux下用swt-3.5.1-gtk-linux-x86.jar7.Exception in thread "main" .ProtocolException:cannot write to a URLConnection if doOutput=false - call setDoOutput(true)环境:用URLConnection送某url发送数据时原因:doOutput=false时,不能发送数据解决:如urlConnection.setDoOutput(true).SocketException: Connection resetat .SocketInputStream.read(SocketInputStream.java:168)at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)at java.io.InputStreamReader.read(InputStreamReader.java:167)at java.io.BufferedReader.fill(BufferedReader.java:136)at java.io.BufferedReader.readLine(BufferedReader.java:299)at java.io.BufferedReader.readLine(BufferedReader.java:362)at com.eagle.service.AutoUpdate.run(AutoUpdate.java:43)环境:j2se socket编程时,服务器端报错原因1:服务器端用BufferedReader,时,没有读到一行解决:客户端用PrintWriter, pw.println(),不能用pw.print(),因为br.readLine()是读一行环境:j2se socket编程时,服务器端/客户端在br.readLine()时报错原因2:服务器端用BufferedReader,br.readLine()时,客户端/服务器已经退出,但是并未通过服务器/客户端,即服务器端/客户端的socket还没有关闭,当用br.readLine()时就会出现这种情况解决:在关闭客户端时要socket.close(),同时还要向服务器发送一条退出的信息,这样让服务器知道某个客户端已经关闭,它就可以终止对此客户端的线程了,反之服务器也是一样.hibernate.PropertyAccessException: Null value was assigned toa property of primitive type setter of er环境:hibernate原因:oolean类型的值为null,boolean类型的值必须是true/false解决:save or update时给boolean类型的值赋true/false10.用占位符查询时出现空指针ng.NullPointerExceptionatorg.hibernate.hql.ast.ParameterTranslationsImpl.getNamedParameterExpectedType(ParameterTranslat ionsImpl.java:63)at org.hibernate.engine.query.HQLQueryPlan.buildParameterMetadata(HQLQueryPlan.java:245)at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:95)at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)at .struts.action.LoginAction.execute(LoginAction.java:72)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)atorg.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11Ba seProtocol.java:664)at .PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)at .LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)at ng.Thread.run(Thread.java:595)环境:hibernate原因:HQL 不能解析解决:错误写法:String hql = "select m from com.eagle.oa.model.Message m where m.ids like: id";正确写法:String hql = "select m from com.eagle.oa.model.Message m where m.ids like:id";ng.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!原因:在使用hibernate的session.createQuery(.....)时设置参数的下标应该从0开始解决:如:return session.createQuery("from User u where erName = ? and password = ?").setParameter(0, name).setParameter(1, password).uniqueResult();.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.wxj.entities.Group环境:hibernate原因:某个实例的属性一个对象,这个对象没有保存,还是暂态的对象解决:先保存这个对象,或是在另一端加inverse = true13.ORA-01461: can bind a LONG value only for insert into a LONG column环境:oracle原因:jar冲突解决:换成classes12.jar包即可14.ERROR LazyInitializationException:19 - could not initialize proxy - the owning Session was closed环境:SSH原因:当一个类或属性设置了lazy="true",操作对象时,session已经关闭了解决:使用Spring的过滤器openSessionInView.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into MIT/AUTO or remove 'readOnly' marker from transaction definition.环境:SSH原因:这个异常产生的主要原因是DAO采用了Spring容器的事务管理策略,如果操作方法的名称和事务策略中指定的被管理的名称不能够匹配上,spring 就会采取默认的事务管理策略(PROPAGATION_REQUIRED,read only).如果是插入和修改操作,就不被允许的,所以包这个异常解决:修改spring配置文件中相关事务管理部分mon.beans.ProbeException: There is no READABLE property named 'eid' in class 'com.wxj.entity.Student'环境:ibatis原因:在给对象做操作,设置参数时,指定的参数不是对象中有的属性,就会抛出此异常解决:核对对象的属性ng.OutOfMemoryError: PermGen space环境:很多,如ssh整合时原因:不断的更新class,造成应用重启,最终造成代码区的内存空间满了解决:方法很多,1重启,2增加代码区的大小,3少更新class,4有时可能是log4j造成的问题,建议使用common-loggin.jar 5,优化代码以下来自CSDN的jinhuiyu:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息,可以用如下方法解决(根据你的实际情况设置大小),但是这只是临时的解决方法,更重要的是改造你的CODE1.可以在windows 更改系统环境变量加上JAVA_OPTS=-Xms64m -Xmx512m2,如果用的tomcat,在windows下,可以在C:\tomcat5.5.9\bin\catalina.bat 中加上:set JAVA_OPTS=-Xms64m -Xmx256m位置在: rem Guess CATALINA_HOME if not defined 这行的下面加合适.3.如果是linux系统Linux 在{tomcat_home}/bin/catalina.sh的前面,加set JAVA_OPTS='-Xms64 -Xmx512'18.在客户端使用dwr时,即跨域访问时,出现“拒绝访问“及“找不到某个属性”的问题(在服务器端调用时却正常)环境:在客户端使用dwr原因:1。

java常见异常处理方案

java常见异常处理方案

JAVA常见异常1. ng.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是&quot;程序遇上了空指针&quot;,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。

对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。

数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)2. ng.classnotfoundexception这个异常是很多原本在jb等开发环境中开发的程序员,把jb下的程序包放在wtk下编译经常出现的问题,异常的解释是&quot;指定的类不存在&quot;,这里主要考虑一下类的名称和路径是否正确即可,如果是在jb下做的程序包,一般都是默认加上package的,所以转到wtk下后要注意把package的路径加上。

3. ng.arithmeticexception这个异常的解释是&quot;数学运算异常&quot;,比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。

4. ng.arrayindexoutofboundsexception这个异常相信很多朋友也经常遇到过,异常的解释是&quot;数组下标越界&quot;,现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。

解决Hmily与Feign冲突报错NullPointerException的问题

解决Hmily与Feign冲突报错NullPointerException的问题⽬录Hmily与Feign冲突报错 NullPointerException解决⽅法ng.NullPointerException出现的⼏种原因及解决出现的原因Hmily与Feign冲突报错 NullPointerException在项⽬中使⽤了Hmily保证分布式事务的⼀致性,由于Hmily会注册⼀个 HmilyFeignInterceptor ,并且feign会将其添加到SynchronousMethodHandler 中的 requestInterceptors ,当feign客户端执⾏ HmilyFeignInterceptor 中apply⽅法public void apply(final RequestTemplate requestTemplate) {Transmiter.getInstance().transmit((x$0, xva$1) -> {requestTemplate.header(x$0, new String[]{xva$1});}, HmilyTransactionContextLocal.getInstance().get());}由于获取到的 HmilyTransactionContext 为 null ,所以抛出 NullPointerException 异常。

解决⽅法定义⼀个后置处理器,将没有被 @Hmily 注解的⽅法,移除 HmilyFeignInterceptor 。

package com.jz.shop.cart.service;import mons.utils.text.StringUtils;import feign.InvocationHandlerFactory;import feign.ReflectiveFeign;import feign.RequestInterceptor;import lombok.extern.slf4j.Slf4j;import org.dromara.hmily.annotation.Hmily;import org.dromara.hmily.springcloud.feign.HmilyFeignInterceptor;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.core.annotation.AnnotationUtils;import ponent;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RestController;import ng.reflect.Field;import ng.reflect.Method;import java.util.List;import java.util.Map;/*** @author:JZ* @date:2020/6/1*/@Slf4j@Componentpublic class ShopFeignPostProcessor implements BeanPostProcessor {public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {// 对所有含有 @FeignClient 的bean进⾏处理if (StringUtils.isNotNull(AnnotationUtils.findAnnotation(bean.getClass(), FeignClient.class))) {// 排除含有 @Controller 和 @RestController 注解的beanif (StringUtils.isNotNull(AnnotationUtils.findAnnotation(bean.getClass(), Controller.class)) ||StringUtils.isNotNull(AnnotationUtils.findAnnotation(bean.getClass(), RestController.class))) {return bean;}try {// 获取代理类中的 FeignInvocationHandlerField h = bean.getClass().getSuperclass().getDeclaredField("h");boolean hAccessible = h.isAccessible();h.setAccessible(true);Object feignInvocationHandler = h.get(bean);/*** 获取 FeignInvocationHandler 中 dispatch 字段的 Map<Method, MethodHandler> dispatch 属性。

java.lang.NullPointerException异常问题解决方案

ng.NullPointerException异常问题解决⽅案ng.NullPointerException异常原因是因为创建了⼀个引⽤类型的变量却没有指向任何对象⽽⼜去通过这个引⽤类型变量加点的形式去访问⾮静态的⽅法及属性。

给出三种情况,第⼀种情况,在启动类中定义了引⽤类型变量,赋值为空:/*** 引⽤类型变量没有指向对象所引起的空指针异常* @author Superhero* @version 2018年12⽉16⽇上午10:32:43*///图书类class Books{private String name;private String author;private double price;public Books(){}public Books(String name, String author, double price){ = name;this.author = author;this.price = price;}public String getName(){return name;}public String getAuthor(){return author;}public double getPrice(){return price;}}//启动类public class NullPointerExceptionTest1{public static void main(String[] args){Books book=null;//下⾯⼀⾏代码会报指针异常错误:System.out.println("name:"+book.getName()+", author:"+book.getAuthor()+", price:"+book.getPrice());}}第⼆种情况:创建了⼀个引⽤类型的数组,却没有给数组元素指向对象⽽调⽤了。

Bug不能重现的原因分析及其对策

Bug不能重现的原因分析及其对策摘要:本文简要分析了无法重现的Bug的可能产生原因,包括环境不一致、缺少最准确的描述和浏览器的不当设置。

针对这些原因,本文给出了相应的对策。

通过这些措施,可以重现许多以前认为不可重现的Bug。

关键词:重现;Bug;环境在测试人员提交bug后,最不希望看到的结果是它们被标记为INVALID,尽管你坚信这一定是Bug。

开发人员查看了bug的Description后,最不希望的结果是你无法重现它们,尽管他使用了所有可能的方法去重现它。

一旦出现这样的情况,测试人员会很伤心,开发人员也会对测试人员有意见。

这就使得关系本来就不怎么融洽的测试人员和开发人员之间的关系更加紧张。

这对于关系紧张的测试人员和开发人员来说,无异于是火上浇油。

为了减少这种情况的出现,非常有必要分析一下Bug不能重现的原因。

根据我的测试经验,Bug不能重现的原因有:一、环境不一致这是bug不能重现的最主要的原因。

在开发人员认为这是无效的bug 里面,估计至少有80%的Bug是因为环境不一致的原因造成的。

这既包括开发环境和测试环境的不一致,也包括开发环境和系统的实际运行环境不一致。

Bug产生是有一定原因的,它的重现也需要一定的环境。

如果没有相应的环境,那么你可能很难这个Bug。

从广义上来说,保证或影响系软件的任何因素都是环境。

例如,硬件的配置、软件的设置、网络的带宽、网速等。

通常,环境中的软件因素有:系统的Build、Application Server 的类型和Version、Operation System 的语言和Version、浏览器的语言和Version等。

下面是我的一些有趣的经历:某个Bug 只出现在WebSphere 6.0.2.15上,按照开发人员的要求,把WebSphere升级到6.0.2.17 后,此Bug就自动消失了。

因此,此Bug是因为WebSphere的版本不一致引起地。

几个图片在某个Build上莫名其妙地消失了,刚开始怀疑是开发人员修改别的Bug 而引起的错误。

java.lang.NullPointerException错误解决办法

JSP网站源码怎么用?ng.NullPointerException处理之完整方案与原因分析!2011-06-04 12:53要的不是错误是什么。

而是原因是。

今天就让兄弟我为广大网站开发初学都来揭开羽月希大塚咲月丘兔不知道你的车跑了多少万公里了!不知道你是不是新手!要是新手的话只能告诉你离合和油门配合不好,需要多练!要是老司机的话可能是你车的问题了!检查一下你的车油泵打不打油?火花塞点火时间配合怎么样!是不是好换火花塞了!是不是好清理气门和喷油嘴了?ng.NullPointerException错误的神秘面纱!史上最全,最深入的分析! 让你看完这篇不用再看下一篇废话不多说。

下面开始全面分析。

(环境:tomcat+sql server+jsp)本质上。

这个错误是数据库连接的错误(当然前提是代码本身没错,因为我们说的是源码!)。

经过我舍友的仔细研究(他是个低调的人,所以就由我帮他写了。

必须达到以下条件(错误原因就是以下六条没配置完):1.JA V A环境配置正确。

2.源码里面的包没有与tomcat的包冲突。

3.把数据库文件给导入到了SQL SERVER(或者其它数据库系统)里面。

并且数据库系统正在运行。

4.添加了数据源。

5.数据库源文件的系统类型匹配(不匹配重新建立数据库,源码里面一般含有数据库的表结构及内容。

),且数据库的连接密码正确。

6.JDBC驱动文件(或者其它)存在且放在tomcat的lib目录下面。

(msbase.jar,mssqlserver.jarmsutil.jar)下面开始说如何配置以上几项。

1。

百度搜索-》JA V A环境变量配置-》百度文库那一条。

按照里面说的配置。

最后测试javac 能否显示信息。

显示成功完成此步。

2。

网站源码-》WEB-INF-》lib里面的.jar包没有和tomcat的lib目录下的包重复。

有的话把源码里面的包删除。

3.SQL SERVER企业管理器。

在数据库上右键-》所有任务-》附加数据库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ng.NullPointerException的可能原因及处理ng.NullPointerException的可能原因及处理
ng.NullPointerException具体意思是空指针异常,最常见的问题就是没有初始化。

字符串等数据类型没有初始化类实例(对象)有用具体的类初始化没有判断是否为空Eg:
源码:
1 public static BookInformation[] ImFromClassification(String a){
2 Connection conn = null; 3
PreparedStatement ps = null; 4
ResultSet rs = null; 5
try{ 6
int x = 0; 7
conn = LinkMysql.getDBconnection(); 8
if(conn == null){System.out.println("conn");} 9
String sql="select * from bookinformation where classification=?";10
ps = conn.prepareStatement(sql);11
ps.setString(1, a);12
rs = ps.executeQuery();13
rs.beforeFirst();14
while(rs.next()){15
++x;16
}17
System.out.println(x);18
BookInformation[] a1 = new BookInformation[x];19 rs.first();20
for(int i = 0; i //a1[i] = new BookInformation();22
a1[i].setName(rs.getString("name"));23
a1[i].setAuthor(rs.getString("author"));24
a1[i].setClassification(rs.getString("classification"));25 a1[i].setAmount(rs.getInt("amount"));26
a1[i].setPrice(rs.getInt("price"));27
a1[i].setSalvesV olum(rs.getInt("sales_volum"));28 rs.next();29
}30
return a1;31
32
} catch (SQLException e) {33
System.out.println("xxx");34
return null;35
}36
finally{LinkMysql.closeDB(conn, ps, rs);}37
38 }
报错:
1 root cause23 ng.NullPointerException4 Dao.BookInfor.ImFromClassification(BookInfor.java:31)5
org.apache.jsp.front.home_jsp._jspService(home_jsp.java:120)6
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)7 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)8
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja va:439)9
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)10 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)11 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)12
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)分析:
数组定义(BookInformation[] a1 = new BookInformation[5])之后,没有对每个数组元素初始化。

更改:
1 public static BookInformation[] ImFromClassification(String a){
2 Connection conn = null;
3 PreparedStatement ps = null;
4 ResultSet rs = null;
5 try{
6 int x = 0;
7 conn = LinkMysql.getDBconnection();
8 if(conn == null){System.out.println("conn");}
9 String sql="select * from bookinformation where classification=?";
10 ps = conn.prepareStatement(sql);
11 ps.setString(1, a);
12 rs = ps.executeQuery();
13 rs.beforeFirst();
14 while(rs.next()){
15 ++x;16 }
17 System.out.println(x);
18 BookInformation[] a1 = new BookInformation[x];
19 rs.first();
20 for(int i = 0; i 21 a1[i] = new BookInformation();
22 a1[i].setName(rs.getString("name"));
23 a1[i].setAuthor(rs.getString("author"));
24 a1[i].setClassification(rs.getString("classification"));
25 a1[i].setAmount(rs.getInt("amount"));
26 a1[i].setPrice(rs.getInt("price"));
27 a1[i].setSalvesV olum(rs.getInt("sales_volum"));
28 rs.next();
29 }
30 return a1;
31
32 } catch (SQLException e) {
33 System.out.println("xxx");
34 return null;35 }
36 finally{LinkMysql.closeDB(conn, ps, rs);}
37
38 }。

相关文档
最新文档