我的异常Exception备忘学习JAVA牛人--有摘抄

来源:互联网 发布:java从键盘输入字符串 编辑:程序博客网 时间:2024/06/05 10:58

原文地址:http://hi.baidu.com/sd252319571/item/05660a231bbf173594f62b99


=========================
java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V
情况一:hql语句错误 
======================
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

可能是jar包位置导致的。

Java虚拟机是根据Java ClassLoader(类加载器)决定如何加载Class。 
系统默认提供了3个ClassLoader 
Root ClassLoader,ClassPath Loader,Ext ClassLoader 
我们也可以编写自己的ClassLoader,去加载特定环境下的Jar文件。 
能不能加载Jar,加载哪里的Jar,是由ClassLoader决定的。

楼主的问题可能是 导入的仅仅是jar包的引用,例如在eclipse中通过build path加进user lib……(类似快捷方式) 
这种在Java Application中没问题,但在web Application中可能会出现找不到类的异常。 
在WEB Application中jar包最好放在webroot或webcontent下的lib文件夹内,特别是xml中用到的jar包。

我也遇到了这个问题,包已经放到lib下,在类中import也没问题,就是resin启动报错. 
解决办法,clean project,重新部署,ok. 
诡异问题,好比机器出问题,先重启下电脑,就好了一样
===========================
java.sql.SQLException: ORA-00001: 违反唯一约束条件 (SPIDER_USER.TASK_KEY)
表的主键唯一性
==================================
NOSuchMethod 找不到此方法
java.lang.NumberFormatException: For input string: "1,588" 类型不匹配 中间的,
如果是js传值,可以吧js内接收时加type:'int'
=================================
org.hibernate.QueryException: could not resolve property: status of: 
        com.pattek.entity.conretrieval.CrawlTask [update com.pattek.entity.conretrieval.CrawlTask t set t.status = :NewStatus where t.id = :taskId]
status 与Entity中不对应 statusInfo
===================================================
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.pattek.entity.structure.StructureInfo#101]
当Struts框架在调业务逻辑方法修改页面传过来的时候数据的时候 会去调modifyProduct方法进行修改 
在新版本中就有个非常隐蔽的错误了,注意看在同一个业务逻辑方法中调了2次DAO层的方法,如果要修改的对象在 
数据库中还存在就有个问题产生了,该方法获得的session管理了一个名为pro的对象而这个对象的id和方法传入的 
product的id是一样的所以 当在本方法中再去调DAO层的modifyProduct方法的时候获得的session是和调 
findProductByName这个业务方法获得的一个session是同一个 ,因为我把session的关闭操作放到页面请求 
处理结束response回去的时候通过那个字符编码转化的filter过滤的是执行完doFilter方法后做的关闭 
Hibernate Session操作来实现提交数据到数据库的 所以最终在这个修改的业务逻辑中使用2次Dao层的方法 
而获得的是同一个session 所以要修改一个和该session管理的一个对象一样的identifier的对象会出现冲突.

解决办法有在该方法中执行dao.modifyProduct(product);前先将session关闭 调用Session的 close方法 
Session的缓存被清空,其中的所有持久化对象都变为游离对象, 
调用Session的evict()方法能够从缓存中删除一个持久化对象,使其变为游离状态,这样也能达到解决同一个 
session中关联2个同一个identifer的对象更新的时候产生的冲突

问题原因找到解决就好办了,只要把要考虑并发情况出现的用户要修改的数据可能在提交后是否还存在的数据验证放到struts调用该方法的Action中去判断 就行了

从设计思想上看 修改的业务逻辑方法 还是做了它不该做的事就是去判断被修改的对象是否还存在,这个应该交给调用它的上层逻辑去判断 
还有看来还是要老实的做单元测试,写好某层的某方法就先做单元测试免得让错误影响到后面的实现,最终导致一时半会找不到错误的源头

=====================================
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 
Io 异常: The Network Adapter could not establish the connection 
这个异常的出现一般与数据库和你的PC的设置有关

这种异常的出现大致上有下面几种:

1。IP错误。 
在设置URL时错误,例如:jdbc:oracle:thin:@192.168.0.36:1521:sharp 
数据库服务器不正确:ping 服务器IP是否正确。不正确,将URL更改为正确 
端口号错误:一般不会错误。 
进行一下操作:在DOS上键入sqlplus,检查oracle是否开启 
一却正常,执行下面第2步。

2。防火墙 
如果机器上安装有放火墙,可能是服务器端口号屏蔽而造成的。关闭防火墙后,尝试重新连接。 
仍然不行,执行第3步。

3。数据库监听未启动 修改PC上注册表中的ImagePath值。 
我下面以现在主流的数据库ORACLE为例 
重新手动启动数据库监听

进入 Oracle 的 Net Manage ,查看你的服务名:orcl 和监听程序:LISTENER 两项中的主机名是什么,
如果默认的没有指定我记得是 localhost,
报java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection ,
一般就是连接数据库的时候使用链接字符串,jdbc:oracle:thin:@192.168.102.51:1521:orcl,
一旦你掉线或者是在 Net Manage 中的主机名和 192.168.102.51 不匹配时就会报上面的异常。
解决办法:进入 Net Manage 将服务名:orcl 和监听程序:LISTENER 两项中的主机名设置成你 PC 的主机名称,我 PC 的主机名为:TB,所以我这里设置的是 TB。然后我的链接字符串是:jdbc:oracle:thin:@192.168.102.51:1521:orcl 
或者是 jdbc:oracle:thin:@127.0.0.1:1521:orcl ,
注意,以后就不能在使用如:jdbc:oracle:thin:@localhost:1521:orcl,这样的链接字符串了。

他重新插网线了,IP变了.我的数据库里的tnsnames.ora文件也还是以前的,toad还是能连,而且他用9i,我装的10g.谢谢大家的关注.
===================================================
Exception in thread "HouseKeeper" java.lang.NullPointerException
javaw.e没关闭,运行了多个线程的原因
This is because Proxool is not being shutdown properly. 
If the JVM stops then Proxool recognises that and shuts down gracefully, 
but if you redeploy Proxool into some environments (for example, a servlet container) 
then Proxool needs to be explicitly told so by calling <strong>ProxoolFacade.shutdown()</strong>. 
If you have a servlet container then you could put it in the servlet's destroy() method. 
Alternatively, use the ServletConfigurator to both configure and shutdown Proxool
====================================================
java.lang.UnsupportedClassVersionError: Bad version number in .class file

myEclipse,编译器改成JDK6.0 JDK5.0版本的问题Project->Properties->Java Compiler->Configure Workspace Setting


原创粉丝点击