《[计算机软件及应用]Jaa 异常.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]Jaa 异常.doc(36页珍藏版)》请在三一办公上搜索。
1、 JAVA常见问题集粹文件编号:TSPI-GF-01版本号:1.0编 制:陈炯日 期:2010-1-20审 核:日 期:批 准:日 期:第0页文件修订记录时间作者主要修订内容2010.01陈炯编制Java 常见异常集粹目 录1Caused by: line 1:188: expecting CLOSE, found null12ClassNotFoundException: org.hibernate.hql.ast.HqlToken13com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 数据库表标
2、识符.列名 in field list14createSQLQueryis not valid without active transaction15ERROR 1129 (00000): Host XXXXXX is blocked because of many connection errors; unblock with mysqladmin flush-hosts26Exception loading sessions from persistent storage27Hibernate 映射配置文件中outer-join随便配置里会出现heap space异常28Hibernat
3、e运行时表列名加上下划线29IOException while loading persisted sessions: java.io.EOFException310java.io.CharConversionException: Not an ISO 8859-1 character: xx311java.io.IOException: response already committed312java.lang.ClassCastException: org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to
4、org.apache.AnnotationProcessor313java.lang.IllegalArgumentException:Parameter XX does not exist as a named parameter in HQL语句414java.lang.IllegalStateException: getAttribute: Session already invalidated415java.lang.IllegalStateException: BeanFactory not initialized or already closed - call refresh b
5、efore accessing beans via the ApplicationContext516java.lang.IllegalStateException: getOutputStream() has already been called for this response517java.lang.IllegalStateException: getWriter() has already been called for this response618java.lang.NoClassDefFoundError:org/objectweb/asm/Type619java.lang
6、.NoSuchMethodError: antlr.collections.AST.getLine()I720java.lang.NoSuchMethodError:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V721java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(I)V722java.lang.OutOfMemoryError: Java heap spa
7、ce723java.lang.OutOfMemoryError: PermGen space824java.lang.StackOverflowError925java.lang.UnsupportedClassVersionError: Bad version number in .class file1026java.lang.UnsupportedClassVersionError:Unsupported major.minor version 51.01027.SocketException: Connection reset by peer: socket write error10
8、28.SocketException:Unexpected end of file from server1129java.sql.SQLException: Connections could not be acquired from the underlying database!1130java.util.ConcurrentModificationException1331javax.naming.NameNotFoundException: Name jdbc is not bound in this Context1632javax.servlet.ServletException
9、: java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered1733javax.servlet.ServletException: java.lang.NoSuchFieldError: deferredExpression1734Lock wait timeou exceeded try restarting transaction1835no persistent classes found for query class1836org.apach
10、e.struts2.json.JSONWriter can not access a member of *1937org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class for connect URL null2038org.hibernate.AnnotationException:OneToOne or ManyToOne oncom.greatwe.mup.dangeroussource.entity.DangeroussourceEntity.restreeCd2239org
11、.hibernate.AnnotationException: Unable to create unique key constraint (DRILLINGDATE, ORGNAME, EMERGENCYCD) on table T_EMERGENCY_DRILLING: EMERGENCYCD not found2240org.hibernate.AssertionFailure: possible nonthreadsafe access to session2241org.hibernate.exception.JDBCConnectionException: could not e
12、xecute query2342org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():2543org.hibernate.LazyInitializationException: failed to lazily initialize a collection of2544org.hibernate.LazyInitializationException: could not initialize proxy - no
13、Session2545org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed2646org.hibernate.HibernateException: CGLIB Enhancement failed2747org.hibernate.HibernateException: createQuery is not valid without active transaction2748org.hibernate.HibernateException:
14、 Illegal attempt to associate a collection with two open sessions2749org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: T_HAZARD_MAIN, for columns: org.hibernate.mapping.Column(dangeroussourceDtlEntity)2850org.hibernate.MappingException: Repeated column in mapping
15、 for entity2851org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)2852org.hibernate.QueryException:Unabletoresolvepath3053org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row co
16、unt: 0 expected: 13054org.hibernate.TransactionException: Transaction not successfully started3055org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing:*3156org.objectweb.asm.ClassVisitor.visit3157transaction completed o
17、n session with on_close connection release mode; be sure to close the session to release JDBC resources3158User defined class com.sun.faces.application.WebappLifecycleListener is not a listener, as it does not implement the correct interface(s).32321 Caused by: line 1:188: expecting CLOSE, found nul
18、l解决方法:hql语句少了一个),hibernate在转换的时候报错。2 ClassNotFoundException: org.hibernate.hql.ast.HqlToken分析:weblogic.jar中已经有了一个antlr.jar的版本,导致应用中hibernate3.jar中用到的antlr.jar不能找到,导致异常。解决方法:在hibernate.properties上,或是在spring的conext xml中,加上一个属性hibernate.query.factory_class,值为org.hibernate.hql.classic.ClassicQuery Trans
19、latorFactory。或者在hibernate.cfg.xml文件中加上org.hibernate.hql.classic.ClassicQueryTranslatorFa ctory如果是Spring配置Hibernate则在bean配置中添加org.hibernate.hql.classic.ClassicQuery TranslatorFactory3 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 数据库表标识符.列名 in field list分析:先检查数据库相应的数据库表中是否
20、存在这个列名的列。解决方法:在相应的数据库表中添加这一列。4 createSQLQueryis not valid without active transaction 解决方法:如果使用hibernate的getCurrentSession()获得session对象,对查询语句也需要开启事务,不然就会抛出如上异常!5 ERROR 1129 (00000): Host XXXXXX is blocked because of many connection errors; unblock with mysqladmin flush-hosts分析:这说明mysqld已经得到了大量(max_co
21、nnect_errors)的机“hostname”的在中途被中断了的连接请求。在 max_connect_errors次失败请求后,mysqld认为数据库出错了,并且阻止该站点进一步的连接,直到有人执行命令 mysqladmin flush-hosts。解决方法:重启数据库或调整它:set global max_connect_errors=1000。6 Exception loading sessions from persistent storage分析:保存在硬盘上的session数据读取失败。解决方法:将work((例如:tomcat6.0.35workCatalinalocalhos
22、t)下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser亦可。7 Hibernate 映射配置文件中outer-join随便配置里会出现heap space异常解决方法:Outer-join为false时可以配置lazy为true,表示需要时才加裁。8 Hibernate运行时表列名加上下划线解决方法:如果对AnnotationSessionFactoryBean配置了如下属性就会对相应的数据表列名称加上下划线。9 IOException while loading persisted sessions: java.io.EOFException分析:tomcat对保存硬
23、盘的session读取失败。解决方法:打开TOMCAT的安装目录,在WORK文件夹找到当前项目文件夹,把里面的session.ser删除即可。10 java.io.CharConversionException: Not an ISO 8859-1 character: xx分析:OutputStream输出的二进制的流,没有对字符进行编码,stream只能够使用iso 8859-1编码的字符,writer输出的文本信息,是经过系统编码之后输出的。解决方法:用PrintWriter来输出就不会出现异常。11 java.io.IOException: response already commi
24、tted分析:Jsp页面输出在weblogic下会出现异常,在tomcat下正常显示。解决方法:1、在response使用前加response.reset(); 2、把out.clear();out = pageContext.pushBody();注释掉12 java.lang.ClassCastException: org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.apache.AnnotationProcessor分析:tomcat的lib文件夹jar包和项目的lib文件下的jar包冲突了。
25、解决方法:把项目下lib文件下和tomcat的jar的重复的全部删除。或者修改了tomcat里的context.xml文件,在context 元素下添加 13 java.lang.IllegalArgumentException:Parameter XX does not exist as a named parameter in HQL语句解决方法:hql拼写的时候,忘记加XX =?。与Spring整合则要配置annotatedClasses属性或mappingResources。14 java.lang.IllegalStateException: getAttribute: Sessio
26、n already invalidated分析:如果session已经invalidate了,再用session.getAttribute(user);的话会有exception抛出 (java.lang.IllegalStateException: getAttribute: Session already invalidated)。解决方法:使用request.getSession方法,getSession方法有一个参数,可以设置是否在没有session的情况下新建session。如果已经invalidate,那么把这个参数设为false,就会得到null。1HttpSession ses
27、sion=request.getSession(false); if(session=null)已经invalidate 2HttpSession session=request.getSession(true); if(session.isNew()已经invalidate 3使用HttpSessionListener,在sessionDestroyed(HttpSessionEvent se)方法里完成你invalidate以后的工作,如:让客户重新登陆。15 java.lang.IllegalStateException: BeanFactory not initialized or a
28、lready closed - call refresh before accessing beans via the ApplicationContext分析:ApplicationContext ctx = new ClassPathXmlApplicationContext();Spring实例化BeanFactory的时候是默认到classPath下面查找名为applicationContext.xml的文件。解决方法:检查web.xml里配置。16 java.lang.IllegalStateException: getOutputStream() has already been
29、called for this response分析:1、在我们应用验证码时,都会用到字节流response.getOutputStream()来将验证码输出,但是jsp页面自己最后会调用字符流JspWriter的out()方法将页面的内容输出。通过查看servlet的API我们可以看到知道,在servlet中不能够同时利用这两个流输出,解决办法将验证码写在servlet中,具体见下面。2、相信请求转发( request.getRequestDispacher().forward() )和请求跳转( response.sendRedirect() )的区别大家都知道。其中request.get
30、RequestDispacher().forward() 方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程。JSP页面转译为的_servlet会最后调用releasePageContext()方法( All PageContext objects obtained via this method shall be released by invoking releasePageContext().)释放我们页面所有的实体对象,当我们的调用者有页面输出时,就会抛出这个异常。具体原因也没有弄清楚,各位大侠如果谁知道可以告知一下。其实验证
31、码也是同一个原理,如果我们将验证码的代码写在jsp页面中,因为jsp页面会调用JspWriter的out()方法将内容输出,同时我们的图片又调用了response.getOutputStream()方法因此会抛出这个异常;如果我们将验证码写在servlet中,就不会同时使用两种输出也就不会出错。有时即使调用者页面没有输出,也会抛出这个异常,仔细看jsp转译以后的源码发现输出了换行,因此,我们最好把调用者页面的%和和%直接写在一起。解决方法:如果我们实在要在jsp中用到response.getOutputStream(),比如验证码、jspSmartUpload,我们需要在最后加入如下代码:re
32、sponse.reset();out.clear();out=pageContext.pushBody();17 java.lang.IllegalStateException: getWriter() has already been called for this response分析:由于jsp container在处理完成请求后会调用releasePageContet方法释放所用的PageContext object,并且同时调用getWriter方法,由于getWriter方法与在jsp页面中使用流相关的getOutputStream方法冲突,所以会造成这种异常。解决方法:1、应该某
33、处代码用到了writer但是没有关闭,每次用完PrintWriter的时候应该关闭如例:HttpServletResponse response = ServletActionContext.getResponse();PrintWriter writer = response.getWriter();writer.close();2、只需要在jsp页面的最后加上两条语句: out.clear();out=pageContext.pushBody();即可(其中out,pageContext均为jsp内置对象!)3、如果用了struts,要在方法最后return null;4、获取out时执行
34、一下response.reset();18 java.lang.NoClassDefFoundError:org/objectweb/asm/Type解决方法:把Hibernate 的cglib.jar 换成spring的cglib.jar(.sf.cglib-2.2.0.jar),如果是Hibernate报的错则添加asm.jar(com.springsource.org.objectweb.asm-3.1.0.jar)包。19 java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I分析:在项目lib目录下存在两个不同版本的
35、antlr的JAR包文,运行时只从低版本的JAR中读取相应的类时不存在此方法。解决方法:删除低版本的那一个JAR包。20 java.lang.NoSuchMethodError:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V解决方法:一般先检查HQL的语法,当中自定义标识符是否有与SQL关键字冲突的。21 java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(I)
36、V解决方法:把hibernate中的cglib-*.jar和asm-*.jar删除,添加spring中的cglib-2.1.3.jar。22 java.lang.OutOfMemoryError: Java heap space分析:批量处理数据库的程序代码,一开始以为是数据量太大,jvm的内存不够用。解决方法:1、可以在windows 更改系统环境变量加上JAVA_OPTS=-Xms64m -Xmx512m2、如果用的tomcat,在windows下,可以在C:tomcat5.5.9bincatalina.bat中加上: set JAVA_OPTS=-Xms64m -Xmx256m;位置在:
37、 rem Guess CATALINA_HOME if not defined 这行的下面加合适;3、如果是linux系统Linux 在tomcat_home/bin/catalina.sh的前面,加set JAVA_OPTS=-Xms64 -Xmx512。23 java.lang.OutOfMemoryError: PermGen space分析:PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一
38、部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 2、在tomcat中redeploy时出现outofmem
39、ory的错误. 可以有以下几个方面的原因:1、使用了proxool,因为proxool内部包含了一个老版本的cglib。2、log4j最好不用,只用common-logging。3、老版本的cglib,快点更新到最新版。4、更新到最新的hibernate3.2 3。 这里以tomcat环境为例,其它WEB服务器如jboss、weblogic等是同一个道理。一、java.lang.OutOfMemoryError: PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Me
40、ta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。二、java.lang.OutOfMemoryError: Java heap space Heap
41、size设置JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size的大小是Young Generation和Tenured Generaion之和。提示:在JVM中如果98的时间是用于GC且可用的Heap size不足2的时候将抛出此异常信息。提示:Heap Size最大不要超过可用物理内存的80,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为
42、1/4的-Xmx值。三、实例,以下给出1G内存环境下java jvm的参数设置参考: JAVA_OPTS=-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true 解决方法:一、手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh在“echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行: JAVA_OPTS=-server -XX:PermSize=64
43、M -XX:MaxPermSize=128m二、手动设置Heap size修改TOMCAT_HOME/bin/catalina.sh在“echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行:JAVA_OPTS=-server -Xms800m -Xmx800m -XX:MaxNewSize=256m24 java.lang.StackOverflowError分析:运行一个程序,JVM会开辟一块内存空间去储存程序进行时的某些信息,当程序运行时需要储存的信息超过了分配的空间,就会出现那样的问题.比如死循环,递归次数过多,等等。解决方法:首先从程序代码优
44、化方面着手,检查是否有死循环、递归等程序,如果有,修正、优化相关代码。25 java.lang.UnsupportedClassVersionError: Bad version number in .class file解决方法:查看系统的jdk版本:java -versioneclipse的compiler的jdk版本,tomcat所用的jdk版本都设置成一致就可以了26 java.lang.UnsupportedClassVersionError:Unsupported major.minor version 51.0分析:新安装使用了jdk7,编译了一些类替换到原来正常运行的项目中,替
45、换之后发生了Unsupported major.minor version 51.0错误。用jdk7编译的class文件放到基于jdk6运行在tomcat之中,就会报这个错。解决方法:打开exclipse中项目上的属性java compiler选择一个合适的版本,可更改tomcat运行JDK。27 .SocketException: Connection reset by peer: socket write error解决方法:常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是: 1、服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉; 2、客户关掉了浏览器,而服务器还在给客户端发送数据;3、浏览器端按了Stop通常原因为:远程主机上对等方应用程序突然停止运行,或远程主机重新启动,或远程主机在远程方套接字上使用了“强制”关闭 (参见setsockopt(SO_LINGER))。另外,在一个或多个操作正在进行时,如果连接因“keep-alive”活动检测到一个失败而中 断,也可能导致此错误。此时,正在进行的操作以错误码WSAENETR