1。类定义未找到错误java。lang。NoClassDefFoundError。 原因分析 由于该程序调用到的JAVA类文件没有正确上传。 JAVA类文件已经上传,但应用服务器并未检测到,建议将JSP页面重新更新。 解决方案 将JAVA类文件重新上传。 将JSP页面更新并上传;或将应用程序服务器进行重新启动。2。解决java。lang。StackOverflowError错误。 错误信息 严重:Exceptioninitializingpagecontext java。lang。StackOverflowError。。。。。。。。。。。。。。。。。。。。。。。。 原因分析 运行一个程序,JVM会开辟一块内存空间去储存程序进行时的某些信息,当程序运行时需 要储存的信息超过了分配的空间,就会出现那样的问题。比如死循环,递归次数过多,等等。 解决方案 首先从程序代码优化方面着手,检查是否有死循环、递归等程序,如果有,修正、优化 相关代码。3。代码错误分析。 错误信息interfacePlayable{voidplay();}interfaceBounceable{voidplay();}interfaceRollableextendsPlayable,Bounceable{BallballnewBall(PingPang);}classBallimplementsRollable{privateStringname;publicStringgetName(){returnname;}publicBall(Stringname){this。namename;}publicvoidplay(){ballnewBall(Football);System。out。println(ball。getName());}} 解决方案 interfaceRollableextendsPlayable,Bounceable没有问题。interface可继承多个interfaces,所以这里没错。问题出在interfaceRollable里的BallballnewBall(PingPang);。任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。即BallballnewBall(PingPang);实际上是publicstaticfinalBallballnewBall(PingPang);。在Ball类的Play()方法中,ballnewBall(Football);改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。因此编译器将在ballnewBall(Football); 这里显示有错。4。解决MyEclipse开发SSH整合时java。lang。NoSuchMethodError方案 环境显示MyEclipse5。5Struts1。2Spring2。0Hibernate3。1Tomcat 错误提示 原因分析 Spring和Hibernate共用的一些jar文件发生了版本冲突。 解决方案 从出错的字面看,肯定与org。objectweb。asm包有关,检查lib下面关于asm的包,发现包含下面的包:asm2。2。3。jarasm。jarasmattrs。jarasmcommons2。2。3。jarasmutil2。2。3。jar 可以从包名猜,asm2。2。3。jar和asm。jar可能是不同版本的,你可以查看包里的类是否差不多。这时,你可以尝试删除其中一个,重启Tomcat,经过尝试,发现把asm2。2。3。jar包删除后,重启后没出现错误提示。5。Java错误java。lang。Error。 原因分析 对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行; 对系统所访问的外部资源关闭次数太多,外部系统无法正常处理; 系统访问的外部资源出现异常情况。 解决方案 访问外部资源前,首先检查该资源(如数据库)是否可正常连接或操作。 访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作。 尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序的执行效率。6。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。类路径没有找到。 原因分析 可能:ClassNotFoundException:oracle。jdbc。driver。OracleDriver,一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件。 解决方案 没有加载Oracle驱动jar,在。bashprofile中把ojdbc14。jar加进来即可。10。找出以下程序代码中的错误。classSomething{finalinti;publicvoiddoSomething(){System。out。println(ii);}} 解决方案 finalinti是个final的instantvariable(实例变量,或叫成员变量)。final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为finalinti0;或将final去掉也可以,inti属於instantvariable(实例变量,或叫成员变量)。instantvariable有默认值,也就是初始化值会为0。11。如果JSP页面跳转时出现下边的错误信息: Therequestsentbytheclientwassyntacticallyincorrect(InvalidpathwebshoppingCartwasrequested)。 原因分析 strutsconfig中的actionx写成了actionx。do。 解决方案 将strutsconfig中的actionx。do改成actionx即可。12。常见错误提示tomcat:java。lang。OutOfMemoryError:PermGenspacetomcat:java。lang。OutOfMemoryError:Javaheapspaceweblogic:RootcauseofServletExceptionjava。lang。OutOfMemoryErrorresin:java。lang。OutOfMemoryErrorjava:java。lang。OutOfMemoryError 原因分析 应用服务器提示错误。 Java代码导致错误。 解决方案 把启动参数内存值设置足够大。 重点排查以下几点: 1)检查代码中是否有死循环或递归调用。 2)检查是否有大循环重复产生新对象实体。 3)检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。 4)检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。13。错误代码分析publicclassSomething{publicintaddOne(finalintx){returnx;}} 原因分析 intx被修饰成final,致使x不能在addOnemethod中被修改。14。java运行时出现错误。 Exceptioninthreadmainjava。lang。NoClassDefFoundError:MyJavaHello(wrongname:Hello) atjava。lang。ClassLoader。defineClass1(NativeMethod) 解决方案 检查类名拼写是否正确。 类名正确,确认jdk下的tools。jar有没有导进去。 jdk下的tools。jar有没有导进去了,确认导入的jdk是不是有重复。15。在部署Struts时,出现如下错误信息:HTTPStatus404ServletactionisnotavailabletypeStatusreportmessageServletactionisnotavailabledescriptionTherequestedresource(Servletactionisnotavailable)isnotavailable。 原因分析 web。xml文件中未配置ActionServlet。 strutsconfig。xml文件未配置你要访问的Action。 你的jsp文件form标记中action属性的路径名称错误。 非以上三种情况。 解决方案 在web。xml文件中加上ActionServlet的配置信息??????WEBINFstrutsconfig。xml? 在strutsconfig。xml文件检查你要访问的Action配置文件。 检查jsp文件form标记中action属性的路径名称是否与strutsconfig。xml文件中action标记的path属性的路径名称一致。 非以上情况的解决办法就是检查web容器的log日志,如果时tomcat则检查下logs目录下的localhostlog文件,看里边是否记录有错误信息,然后根据错误信息提示将其纠正。16。代码错误分析publicclassPerttyTest{publicstaticvoidmain(String〔〕args){Stringi123,s;sgetStr(i);System。out。println(s);}publicStringgetStr(Strings){StringBuffersbnewStringBuffer();for(intis。length()1;i0;i){sb。append(s。charAt(i));}returnsb。toString();}} 原因分析 定义的getStr方法不是静态方法,需要实例一个对象才能调用。 解决方案 在main下加一行PerttyTestanewPerttyTest(); sgetStr(i)改成sa。getStr(i); 正确的代码如下所示。publicclassPerttyTest{publicstaticvoidmain(String〔〕args){PerttyTestanewPerttyTest();Stringi123,s;sa。getStr(i);System。out。println(s);}publicStringgetStr(Strings){StringBuffersbnewStringBuffer();for(intis。length()1;i0;i){sb。append(s。charAt(i));}returnsb。toString();}}17。couldnotinitializeacollection:〔hibernate。entity。Role。modules32768〕Syntaxerror:Encounteredatline1,column132。 原因分析 红色字部分中为非法字符。 解决方案 将非法字符替换为modulerole。18。错误代码分析publicclassSomething{voiddoSomething(){privateStrings;intls。length();}} 解决方案 局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。19。数据插入异常,GenericJDBCException:couldnotinsert 原因分析 没有建立表或者表中没有任何数据。 插入数据后没有执行提交语句:commit。20。字符串越界错误java。lang。StringIndexOutOfBoundsException等字符串类相关错误 错误信息 Stringsallpower1010011; Stringsaccesspowersallpower。substring(3,4); 原因分析 以上代码段功能的功能是获取字符串sallpower中的第4个字符。 一般情况下,程序不会有问题,如果由于某种原因,sallpower长度变短,程序就会抛出字符串错误。 解决方案 对字符串进行截取(substring,charAt)、转换为字节数组(getBytes),字符数组转换为字符串(valueOf)操作时,先对操作字符串对象的存在性(是否为空)及长度进行检查后,再进行操作。 改写后的正确代码如下。Stringsallpower1010011;if(sallpower。length4)Stringsaccesspowersallpower。substring(3,4);