您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 王牌8 扫雷英雄榜――Java常见错误及解决方案
王牌811.类定义未找到错误java.lang.NoClassDefFoundError。原因分析⑴由于该程序调用到的JAVA类文件没有正确上传。⑵JAVA类文件已经上传,但应用服务器并未检测到,建议将JSP页面重新更新。解决方案⑴将JAVA类文件重新上传。⑵将JSP页面更新并上传;或将应用程序服务器进行重新启动。2.解决java.lang.StackOverflowError错误。错误信息严重:Exceptioninitializingpagecontextjava.lang.StackOverflowError........................原因分析运行一个程序,JVM会开辟一块内存空间去储存程序进行时的某些信息,当程序运行时需要储存的信息超过了分配的空间,就会出现那样的问题.比如死循环,递归次数过多,等等。解决方案首先从程序代码优化方面着手,检查是否有死循环、递归等程序,如果有,修正、优化相关代码。3.代码错误分析。错误信息interfacePlayable{voidplay();}interfaceBounceable{voidplay();2}interfaceRollableextendsPlayable,Bounceable{Ballball=newBall(PingPang);}classBallimplementsRollable{privateStringname;publicStringgetName(){returnname;}publicBall(Stringname){this.name=name;}publicvoidplay(){ball=newBall(Football);System.out.println(ball.getName());}}解决方案interfaceRollableextendsPlayable,Bounceable没有问题。interface可继承多个interfaces,所以这里没错。问题出在interfaceRollable里的Ballball=newBall(PingPang);。任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。即Ballball=newBall(PingPang);实际上是publicstaticfinalBallball=newBall(PingPang);。在Ball类的Play()方法中,ball=newBall(Football);改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。因此编译器将在ball=newBall(Football);这里显示有错。4.解决MyEclipse开发SSH整合时java.lang.NoSuchMethodError方案环境显示MyEclipse5.5Struts1.2Spring2.0Hibernate3.1Tomcat王牌83错误提示406ERROR[org.hibernate.proxy.BasicLazyInitializer]-CGLIBEnhancementfailed:dao.Userjava.lang.NoSuchMethodError:org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Vatnet.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)原因分析Spring和Hibernate共用的一些jar文件发生了版本冲突。解决方案从出错的字面看,肯定与org.objectweb.asm包有关,检查lib下面关于asm的包,发现包含下面的包:asm-2.2.3.jarasm.jarasm-attrs.jarasm-commons-2.2.3.jarasm-util-2.2.3.jar可以从包名猜,asm-2.2.3.jar和asm.jar可能是不同版本的,你可以查看包里的类是否差不多。这时,你可以尝试删除其中一个,重启Tomcat,经过尝试,发现把asm-2.2.3.jar包删除后,重启后没出现错误提示。5.Java错误java.lang.Error。原因分析⑴对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,昀终可能导致系统无法正常运行;⑵对系统所访问的外部资源关闭次数太多,外部系统无法正常处理;⑶系统访问的外部资源出现异常情况。解决方案⑴访问外部资源前,首先检查该资源(如数据库)是否可正常连接或操作。⑵访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作。⑶尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序的执行效率。46.Java调用DLL错误:Exceptioninthreadmainjava.lang.UnsatisfiedLinkError解决。原因分析Exceptioninthreadmainjava.lang.UnsatisfiedLinkError,编译没有问题,运行出现问题,如果错误Exceptioninthreadmainjava.lang.UnsatisfiedLinkError后面是某一个类名的话,很可能是java程序调用了有关dll文件而没有找到这样的dll文件造成的。解决方案把需要的dll文件放到和该java类相同的目录下即可。7.java.lang.OutOfMemoryError异常处理总结。原因分析⑴内存中加载的数据量过于庞大,如一次从数据库取出过多数据。⑵集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。⑶代码中存在死循环或循环产生过多重复的对象实体。⑷使用的第三方软件中的BUG。⑸启动参数内存值设定的过小。8.java.lang.NoSuchMethodError异常处理。原因分析Java程序运行过程中,需要调用某个类的某个方法,但却发现这个方法并不存在,找不到所以会提示这个错误。解决方案⑴检查调用的方法名称是否正确,要检查拼写和大小写。⑵检查调用的类里是否已经有该方法。⑶检查调用的方法的作用域。⑷若是调用别人的包里的方法,首先要确认包是可以找到的(如开发工具中导入包、web应用中有该包等),再按上面1、2、3点检查。⑸某些时候,特别是SSH整合开发,有可能会出现这个异常,一般是包的版本冲突问题,这时候可以尝试更换一下版本。9.类路径没有找到。原因分析王牌85可能:ClassNotFoundException:oracle.jdbc.driver.OracleDriver,一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件。解决方案没有加载Oracle驱动jar,在.bash_profile中把ojdbc14.jar加进来即可。10.找出以下程序代码中的错误。classSomething{finalinti;publicvoiddoSomething(){System.out.println(i=+i);}}解决方案finalinti是个final的instantvariable(实例变量,或叫成员变量)。final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为finalinti=0;或将final去掉也可以,inti属於instantvariable(实例变量,或叫成员变量)。instantvariable有默认值,也就是初始化值会为0。11.如果JSP页面跳转时出现下边的错误信息:Therequestsentbytheclientwassyntacticallyincorrect(Invalidpath/web/shoppingCartwasrequested).原因分析struts-config中的action=x写成了action=x.do。解决方案将struts-config中的action=x.do改成action=x即可。12.常见错误提示。tomcat:java.lang.OutOfMemoryError:PermGenspacetomcat:java.lang.OutOfMemoryError:Javaheapspaceweblogic:RootcauseofServletExceptionjava.lang.OutOfMemoryErrorresin:java.lang.OutOfMemoryErrorjava:java.lang.OutOfMemoryError6原因分析⑴应用服务器提示错误。⑵Java代码导致错误。解决方案⑴把启动参数内存值设置足够大。⑵重点排查以下几点:1)检查代码中是否有死循环或递归调用。2)检查是否有大循环重复产生新对象实体。3)检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。4)检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。13.错误代码分析publicclassSomething{publicintaddOne(finalintx){return++x;}}原因分析intx被修饰成final,致使x不能在addOnemethod中被修改。14.java运行时出现错误。Exceptioninthreadmainjava.lang.NoClassDefFoundError:MyJava\Hello(wrongname:Hello)atjava.lang.ClassLoader.defineClass1(NativeMethod)解决方案⑴检查类名拼写是否正确。⑵类名正确,确认jdk下的tools.jar有没有导进去。⑶jdk下的tools.jar有没有导进去了,确认导入的jdk是不是有重复。王牌8715.在部署Struts时,出现如下错误信息:HTTPStatus404-ServletactionisnotavailabletypeStatusreportmessageServletactionisnotavailabledescriptionTherequestedresource(Servletactionisnotavailable)isnotavailable.原因分析⑴web.xml文件中未配置ActionServlet。⑵struts-config.xml文件未配置你要访问的Action。⑶你的jsp文件form标记中action属性的路径名称错误。⑷非以上三种情况。解决方案⑴在web.xml文件中加上ActionServlet的配置信息??????/WEB-INF/struts-config.xml?⑵在struts-config.xml文件检查你要访问的Action配置文件。⑶检查jsp文件form标记中action属性的路径名称是否与struts-config.xml文件中action标记的path属性的路径名称一致。⑷非以上情况的解决办法就是检查web容器的log日志,如果时tomcat则检查下logs目录下的localhost_log文件,看里边是否记录有错误信息,然后根据错误信息提示将其纠正。16.代码错误分析。
本文标题:王牌8 扫雷英雄榜――Java常见错误及解决方案
链接地址:https://www.777doc.com/doc-5373200 .html