1. 程式人生 > >JAVA程式設計常見錯誤集錦(2)

JAVA程式設計常見錯誤集錦(2)

32, car is not mapped 
可能1: 在cfg.xml中沒有增加對映的hbm.xml檔案在<mapping.../>中

33, 屬性沒有找到 
可能1: hbm.xml檔案中的 <property name =""> 有問題, 也許是name的值與對應類中的成員名不一致

34,SQLException: 無當前連線 可能1:在比如建立帳戶時沒有對相應的方法新增到<list>中去,比如這個沒有加入:<value>newAccount</value>

<bean id="transactionAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> 
<property name="advice"> 
<ref bean="advice"/> 
</property> 
<property name="mappedNames"> 
<list> 
<value>transfer</value> 
</list> 
</bean>


35,SQLException: Syntax error: Encountered "table" at line 1, column 8. 
可能1;執行SQL時出現衝突,可能是SQL語句中使用了關鍵字作為變數來用,比如 
update order set balance=1000000; 
其中order被用作表名來使用,這是錯誤的,因為order是個關鍵字,用在order by中

36, Servlet /Spring-WebMvc threw load() exception 
org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null". 
jar包的衝突,spring-1.2.6.jar和spring.jar出現在一個war的目錄中:J Boss/server/all/deploy/Spring-WebMvc.war/WEB-INF/lib

37, java.sql.SQLException: 當事務仍處於活動狀態時,無法關閉連線。


38 , 
validateJarFile(/home/soft01/Tomcat/webapps/sms-token-struts/WEB-INF/lib/servlet-api.jar) 
Servlet /sms-struts-tiles threw load() exception 
java.lang.ClassNotFoundException: org.apache.struts.action.ActionServlet 
原因:在WEB-INF/lib/ 目錄下有servlet-api.jar與/Tomcat/common/lib目錄下的servlet-api.jar衝突了,把WEB-INF/lib/下的servlet-api.jar刪除就可以了

39,java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn 
Marking servlet action as unavailable 
10:30:47,088 ERROR [/NetCT_OSS]:3953 - Servlet /NetCT_OSS threw load() exception 
javax.servlet.UnavailableException

40,org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null". 
缺少MyEclipse/eclipse/plugins/com.genuitec.eclipse.springframework_5.5.0/data/2.0/dist/modules/spring-struts.jar

41,Caused by: java.sql.BatchUpdateException: ORA-02291: integrity constraint (SD0702.FK82D343CF49A4B831) violated - parent key not found 
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
有可能是ID生成策略的問題,我將它XML對映檔案改成<generator class="increment" />就好了

42, 
2007-08-19 16:21:43,290 ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/OSS].[action]] - Servlet.service() for servlet action threw exception 
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [entity.Module#2] 
java.util.ConcurrentModificationException 
原因:已經有物件擁有了所選擇的module,用clear(),而不是remove();

43, 
ERROR [org.apache.catalina.session.ManagerBase] - IOException while loading persisted sessions: java.io.InvalidClassException: entity.Module; local class incompatible: stream classdesc serialVersionUID = -5988350031935445758, local class serialVersionUID = -297934247726484429 
java.io.InvalidClassException: entity.Module; local class incompatible: stream classdesc serialVersionUID = -5988350031935445758, local class serialVersionUID = -297934247726484429 
在Module中加上一個關鍵字:transient

44, 
Caused by: java.sql.BatchUpdateException: ORA-02292: integrity constraint (SD0702.SYS_C00132664) violated - child record found 
原因:有其他的表引用了該表的外建,所以報這個異常,如果沒有引用就不會出現

45, 
出現數組越界的時候,看看是不是迴圈時沒有加=,比如: 
for(int i = 1; i<arr.length;i++)可以改成 
for(int i = 1; i><=arr.length;i++)


46.如果使用Ant和Junit是被報找不到test,檢查一下是否誤用了private 
出錯資訊: 
<failure message="No tests found in test.AllTest" type="junit.framework.AssertionFailedError">junit.framework.AssertionFailedError: No tests found in test.AllTest 
該錯誤有個很特別的特點,當你不通過ant來執行測試,而是通過AllTest類來執行的話,可以正常執行。小心哦

47.如果遇到報:表名無效,且jvm報嚴重錯誤,看看是不是用了資料庫的保留關鍵字來做表名了,如User。

48.使用ant時必須小心ant的classpath它用的不是IDE的classpath,小心!

49.小心下邊的異常, 
exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of xp.bean.Users.?" type="net.sf.hibernate.PropertyAccessException">java.lang.ClassCastException at xp.bean.UsersMetaClass1.setPropertyValues(<generated>) at net.sf.hibernate.persister.AbstractEntityPersister.setPropertyValues 
上次出現該錯錯誤的原因是: 
原始檔裡我的class型別為一個類Contact contact 
而跑到mapping裡卻成了Set,呵呵厲害。

50.突然間冒出大量的NullPointException 
重新build一下。

51.="Flush during cascade is dangerous - this might occur if an object was deleted and then re-saved by cascade"

52.Tapestry的出錯資訊: 
Class com.bookshop.Hello does not implement the IPage interface. 
location: context:/WEB-INF/Home.page, line 6 
原因:與顯示有關的哪個java類沒有從IPage家族繼承。

53.使用ant時給出的路徑好象不允許出現空格。

54.由於使用ant時用junit做測試的話,classpath中出現j2ee.jar的話,問題多多。例如xml格式的log檔案生成不了,莫名其妙的NullPointException等。所以我設定了兩個包個包含j2ee.jar,為編譯用;一個沒有,為junit用

55.進行單元測試時,在查詢返回後應馬上assertNotNull(),這樣可以更快速的定位NullPointException

56.要使用ResourceBundle的話,要千萬小心。必須用日誌記錄下它的狀態。還有該屬性檔案應該放在classes下面。

57.當要顯示任何頁面時,都被提示無效,那麼應該檢查一下lib目錄了,還有一些很奇怪的異常,例如你明明可以找到一個類但是伺服器卻提示ClassNotDefException,那麼估計是缺少了該類所必須的包了。或者多了不相容的包,如, xdoclet系列包不被struts的lib目錄所相容

58.編寫clone時從Java程式設計思想(2nd)上學到的(732): 
.引數傳遞過程中會自動產生別名(alias)。 
.沒有局域物件(local objects),只有局域性的(local)references。 
.reference受範圍(scope)的限制,物件則否。 
.物件的壽命從來不是Java的討論議題(因為有垃圾回收機制)

59.try catch finally的域居然是分離的。

60.jsp亂碼的其中一個原因:charset="gb2312" 等號"="的兩邊不允許有空格。

61.我的基於Displaytag的簡單報表解決方案。 
http://displaytag.sourceforge.net/ 
下載displaytag.jar和displaytag.tld 
displaytag.jar放在lib目錄,而displaytag.tld放在WEB-INF目錄,在web.xml中為displaytag.tld宣告一下。 
<taglib> 
<taglib-uri>http://displaytag.org</taglib-uri> 
<taglib-location>/WEB-INF/displaytag.tld</taglib-location> 
</taglib> 
在jsp裡使用前,加上 
<%@ taglib uri="http://displaytag.org" prefix="display" %>

注意該軟體有個bug,他要用的一個包common-lang.jar版本必須在2.0以上。 
如果碰到下面異常,則應堅持一下是否該包的版本問題。 
java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.capitalize(Ljava/lang/String;)Ljava/lang/String; 
然後就可放心使用了 
<display:column property = "xxx"/>其中xxx為物件中的帶有getter的變數>。 
定義表格的樣子,用css定義。如 
TABLE.its THEAD TR { 
BACKGROUND-COLOR: #69c 

TABLE.its TR.even { 
BACKGROUND-COLOR: #def 

在使用分頁時,可能會出現這種情況,點選其他頁時,彈出下載視窗,讓你下載當前jsp頁面,這是因為你在當前頁面讀取了資料的緣故。解決辦法為在action裡讀取資料而不是在jsp裡。可以參考 
http://www.displaytag.org/example-paging.jsp?d-26189-p=2

62.使用displaytag時,在一列中放入多個元素 
必須在display:table中定義一個id 
<display:table name = "allBooks" class = "its" pagesize = "5" id = "item"> 
<display:column title = "操作"> 
檢視 
編輯 
刪除 
</display:column> 
要在displaytag中使用連結,必須具備paramId,否則不顯示為連結 
<display:column property = "product.name" href = "viewDetailV2.0.jsp" title = "書名" paramId="item" paramProperty="product.id"/> 
可以這樣使用display 
<display:column property = "product.id" title = "ID"/> 
其中product為物件

63.<bean:write name = "xxxx" property = "xxx"/> 可以直接取到session.getAttribute()取到的東西。

64.實驗struts-upload例子時要注意的地方: 
1.If you would rather write this file to another file, please check here: 
這一行要打鉤 
2.If you checked the box to write to a file, please specify the file path here: 
在這裡要重新命名如:c:\b.jpg 
上傳成功的話,會出現提示 The file has been written to "c:\b.jpg"

65.Hibernate的like可以這麼用: 
Query query = session.createQuery("from src.persistent.Book as book where upper(book.name) like :name "); 
query.setString("name", "%"); 
result = query.list();

66.Hibernate出現 duplicate import : className 
異常也可能是因為忘了為持久類在configuration中addClass了

67.<logic:iterate id = "author" name = "authors"> 
name所引用的是session裡的attribute。

68.如果發現要出現詢問下載的情況,有可能是因為要跳轉的頁面出現了問題。試試在要跳轉到的頁刪掉 
<%@ page contentType="text/html; charset=gb2312"%>

69.如果JSP頁面跳轉時出現下邊的錯誤資訊: 
The request sent by the client was syntactically incorrect (Invalid path /web/shoppingCart was requested). 
原因是struts-config的action = "x" 寫成了 action = "x.do"

70.在struts中,strut-config.xml中,forward時使用redirect = "true"可以將.do重定向為.jsp

71.以後在判斷相等性之前先用logger把兩個值顯示出來。

72.從session裡getAttribute後,修改並不需要重新setAttribute一次。

73.在hibernate中使用subclass是一棵繼承樹共用一個表,僅生成個mapping。 
每個類中必須有discrimator-value。在最上層的類中必須宣告: 
@hibernate.discriminator column = "class"。 
不可以將子類新增到configuration裡去。(即不可addClass(子類)) 
使用Xdoclet的建立subclass的例子(該類是父類) 
/** 
* @hibernate.class discriminator-value = "customer" 
* @hibernate.discriminator column = "class" 
*/

而使用joined-subclass則是一類一表,也不許將子類新增進configuration裡去。 
/** 
* @hibernate.joined-subclass 
* @hibernate.joined-subclass-key 
* column="customer_id" 
*/ 
如果發現生成的mapping檔案中joined-subclass的key column為空,那麼可能是@hibernate.joined-subclass-key這句沒有寫對。 
用joined-subclass生成的表,仔細看。Member extends Customer 
create table Customer ( 
id VARCHAR2(255) not null, 
name VARCHAR2(255), 
description VARCHAR2(255), 
primary key (id) 

create table Member ( 
customer_id VARCHAR2(255) not null, 
password VARCHAR2(255), 
primary key (customer_id) 
)

74.在junit中儘量使用assertEquals代替assertTrue;

75.Hibernate 
如果Child extends Parent 
那麼from Parent as parent 也將會將Child選出來,而from Child as child 則不會選出Parent

76.Hibernate 
使用hibernate的one-to-one時,應該兩方向都set,否則會報save NullPointException 
parent.setChild(child); 
child.setParent(parent);

77.Hibernate 
遇到下邊的異常,估計是與因為外來鍵出現了問題:

java.lang.NullPointerException 
at net.sf.hibernate.persister.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:675) 
at net.sf.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:33) 
如: 
* @hibernate.id generator-class = "foreign" 
* @hibernate.generator-param name = "property" value = "customer" 
* @hibernate.one-to-one name = "custmoer" class = "src.persistent.Customer" 
value的值和one-to-one 中name的值不符,則會出現上邊的異常。如果不顯示指定name則預設取成員變數名 
如 
Customer a 
則name = "a" 需要小心的是不是類名。所以,以後最好顯示指定名字為好。

78.出現異常: 
Exceptionobject references an unsaved transient instance - save the transient instance before flushing: src.persistent.Product 
原因沒有為某物件進行set設定, 如上邊的這個就是某物件沒有呼叫setProduct

79. 
"xxx action = "/a" 不用.do和根目錄名


80.
Caused by: java.sql.SQLException: ORA-02291: 違反完整約束條件 (BOOKSHOP.FK4AAEE 
47687CCA6B) - 未找到父項關鍵字 
如果你覺得該做的e是出現這個問題,那麼檢查一下,是否將類的繼承關係在hibernate的mapping中反映了出來。joined-subclass或subclass 
例如a extends b 
如果持久類c 需要Set的是持久類a,那麼你把b傳入,而b又沒有在mapping中將父子關係反映出來的話,就會出現該異常

81.使用DynaActionForm需要注意的問題 
在struts-config宣告 
><form-bean name="memberloginForm" dynamic ="true" type="org.apache.struts.action.DynaActionForm"> 
<form-property name = "name" type = "java.lang.String"/> 
<form-property name = "password" type = "java.lang.String"/> 
</form-bean> 
在Action裡將form強制轉化成DynaActionForm,然後get("屬性名")就可以了

82.struts的validate最簡單實現 
1.首先準備好錯誤提示資訊。 
xxx.properties 裡 
errors.required={0} is required.(預設已有) 
2.Form必須從ValidatorForm繼承 
3.不可以過載ValidatorForm的validate函式 
4.在validate.xml中為你想驗證的表單進行驗證設計。例如 
<form name="logonForm"> 
<field property="userName" depends="required"> 
<arg0 key="prompt.userName"/> 
(該引數將在顯示錯誤資訊是從xxx.properties讀取prompt.userName,填入{}方括號裡,取代0。如果是arg1將將填入{1}位置,以此類推。 
</field> 
</form> 
不需要在action裡做任何處理。只管forward就行了。作為forward的目標頁,不需要任何有關用於處理出錯資訊的處理。

83.伺服器報 
The requested resource (/xxxx/xxx.htm) is not available.的很奇怪的一個的可能原因 
在web.xml中定義的tld,沒有找到 
或者是lib目錄下的包太多出現了問題。 
如 
<taglib> 
<taglib-uri>/spring</taglib-uri> 
<taglib-location>/WEB-INF/spring.tld</taglib-location> 
</taglib> 
如WEB-INF目錄下不存在spring.tld的話,就會報上邊的錯誤

84. 
spring的xxx-servlet.xml的使用SimpleFormController系列的類問題: 
<bean id = "priceIncreaseForm" class="PriceIncreaseFormController"> 
<property name="sessionForm"><value>true</value></property> 
<property name="beanName"><value>priceIncrease</value></property> 
<property name="commandClass"><value>PriceIncrease</value></property> 
<property name="formView"><value>priceIncrease</value></property> 
<property name="successView"><value>hello</value></property> 
<property name="productManager"> 
<ref bean="prodMan"/> 
</property> 
</bean> 
這裡要注意幾個問題: 
(1)上邊的PriceIncrease是了類名,必須在classes裡存在該類,否則報: 
PropertyVetoExceptionsException: 1 errors:-- ErrorCodedPropertyVetoException: message=[Failed to convert property value of type [java.lang.String] to required type [java.lang.Class] for property named 'commandClass'; nested exception is: 
java.lang.IllegalArgumentException: Invalid class name [PriceIncrease]: PriceIncrease]; errorCode=[typeMismatch] 
java.lang.IllegalArgumentException: Invalid class name [PriceIncrease]: PriceIncrease 
(2)<property name="formView"><value>priceIncrease</value></property> 
這一行必不可少,priceIncrease是頁面的名字,他將會是prefix + priceIncrease + suffix 
如果缺少該行,則報: 
javax.servlet.ServletException: Error in ModelAndView object or View resolution encountered by servlet with name 'pocketSpring': View to render cannot be null with ModelAndView [ModelAndView: materialized View is [null]; Model=[{[email protected], org.springframework.validation.BindException.priceIncrease=org.springframework.validation.BindException: BindException: 0 errors}]]

使用Errors的rejectValue相關問題: 
rejectValue(java.lang.String field, java.lang.String errorCode, java.lang.Object[] errorArgs, java.lang.String defaultMessage) 
Reject the given field of the current object, using the given error description. 
當前物件指的是xxx-servlet.xml中與validator類有聯絡的哪個物件。

第一個是:當前物件的屬性名,必須存在 
第二個是:將要從屬性檔案中讀取的訊息 
第三個是:傳遞給所讀取的訊息的引數,如: 
error.too-low=You have to specify a percentage higher than {0}! 
第四個是:當從屬性檔案中讀取訊息不成功時,所reject的值

以後從request中讀取parameter可以借用spring的RequestUtils包裡的 
getStringParameter 
public static java.lang.String getStringParameter(javax.servlet.http.HttpServletRequest request, 
&bsp; java.lang.String name, 
java.lang.String defaultVal) 
Get a string parameter, with a fallback value. Never throws an exception. Can pass a distinguished value to default to enable checks of whether it was supplied. 
不會拋異常 
Hibernate的問題:2.1rc的問題 
INFO: cache provider: net.sf.ehcache.hibernate.Provider 
net.sf.hibernate.HibernateException: could not instantiate CacheProvider: 
解決辦法,2.1rc比以前的版本多需要一個包 
ehcache.jar

85.static的問題 
static函式只可以訪問static成員變數。 
而static變數可以被任何成員函式訪問。

86. 
java.lang.NoClassDefFoundError: javax/transaction/Synchronization]; 
需要新增JTA.jar

相關推薦

JAVA程式設計常見錯誤集錦2

32, car is not mapped  可能1: 在cfg.xml中沒有增加對映的hbm.xml檔案在<mapping.../>中 33, 屬性沒有找到  可能1: hbm.xml檔案中的 <property name =""> 有問題, 也許是name的值與對應類中的成員名

Java程式設計常見"坑"彙總

每天在寫Java程式,其實裡面有一些細節大家可能沒怎麼注意,這不,有人總結了一個我們程式設計中常見的問題。雖然一般沒有什麼大問題,但是最好別這樣做。另外這裡提到的很多問題其實可以通過Findbugs( http://findbugs.sourceforge.net/ )來幫我們進行檢查出來。

Java常見錯誤整理

最新 java虛擬機 home 64位安裝 .cn www. 錯誤 jdk8 image 1、配置完Java環境變量之後,仍然不能使用java命令。 解決方法: 如果是Windows10系統出現此問題,是因為個別Windows10系統不識別“JAVA_HOME”環

《實戰Java高併發程式設計》學習總結2

第3章  JDK併發包 1 synchronized的功能擴充套件:重入鎖。使用java.util.concurrent.locks.ReentrantLock類來實現。 import java.util.concurrent.locks.ReentrantLock; publi

整理一些常見java及android面試題2

                1. 什麼是Activity?四大元件之一,一般的,一個使用者互動介面對應一個activity, activity 是Context的子類,同時實現了window.callback和keyevent.callback, 可以處理與窗體使用者互動的事件. 我開發常用的的有List

【00】面向ArcGIS的Python程式設計——常見錯誤大全後續更新中......

1、縮排錯誤,導致Parsing error IndentationError: unexpected indent (line 3)錯誤。 2、注意>>>和...的區別 3、在使用指令碼執行地理處理工具,例如裁剪(clip)工具時,如果輸入

Java常見幫助類2字串處理類

閒話少說,下面幫組類主要是實現字串判空,字串相等,字串替換,字串填補等十幾個功能,具體看程式碼: /** * 字串處理類 * * */ public class StringUtil { /** * 判斷字串是否為空 * * @param str * @r

Java集合復習Collection2添加一組元素

ray addall 調整 supported cnblogs rust 數組 dal sta 1 import java.util.*; 2 class Snow{} 3 class Powder extends Snow{} 4 class Crusty ex

vue開發中遇到的問題集錦2

bsp gin 加載 圖片 空白 第一個 開發 image host 1,在搭建了一個vue的腳手架之後,寫了第一個組件,路由也已經配置完畢,且頁面的路由顯示是:http://localhost:8080/#/userLogin,userLogin裏面有內容,但是頁面顯示空

SSM集成activiti6.0錯誤集錦

build eid ava maven構建 foreach PC mybatis date 映射文件 項目環境 Maven構建 數據庫:Orcle12c 服務器:Tomcat9 <java.version>1.8</java.version> &l

c語言程式設計常見問題總結1

總結1: 將全域性變數放在會被多次呼叫的標頭檔案中,編譯會報錯:該變數被多次定義,所以是最好把全域性變數放在.c檔案中。 總結2:  Getche()函式,輸入後立即從控制檯取字元,不以回車為結束(帶回顯); Getch()是一個不回顯函式,當用戶按下某個字元時,函式自動讀

JAVA程式設計思想學習筆記

物件導論 1.1 抽象過程 Smalltalk的五個基本特性: 萬物皆為物件。 程式是物件的集合,它通過傳送訊息來告知彼此所要做的。 每個物件都有自己的由其他物件所構成的儲存。 每個物件都有其型別。 某一特定型別的所有物件都可以接受同樣的訊息。

[C#]非同步程式設計: async和await2

一、哪裡來的執行緒? async標記的方法的方法體會被編譯到一個內部結構體的MoveNext方法中,有兩個MoveNext呼叫者是來自於主執行緒之外的同一個工作執行緒。 這一個執行緒是何時發起的呢? Task相關的操作有哪些? 1 // 三、理解await 2 bool '<&

MySQL資料庫錯誤集錦1:Can't connect to MySQL server on localhost (10061)

問題描述: 在命令列輸入 mysql -u root -p 登入mysql,返回”Can’t connect to MySQL server on localhost (10061)”錯誤。 解決方法: 1、將mysql加入到Windows的服務中。切換到mysql安裝目錄下的bin資料夾

網路程式設計:聊天室2

第五步:既然是聊天室,那麼僅僅只能一個使用者自己和自己聊天,顯然該該程式是有瑕疵的。那麼我們就需要支援多使用者同時線上聊天。這一步中,我們就需要用到多執行緒的概念。為什麼要用到多執行緒?執行緒可以通俗的理解為每有一個新運動員便多建造一條跑道,以便所有運動員可以經歷同樣的從頭到尾的全部過程。那如果放到

java程式設計思想-程式碼賞析

package com.test.pet; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public abstract clas

Java的異常捕捉機制2

 1)編寫一個Java程式,接收使用者通過鍵盤不斷輸入表示某門課程的成績的字串(按回車為一個字串結束),當輸入非法數字(輸入值小於0或大於100)時提示成績輸入有誤,當輸入為非數字的字串時提示輸入格式不合法。 程式原始碼: 1.事先需要自定義異常類如下:

Java程式設計思想讀書筆記第1~13、16章

目錄: 第1章 物件導論 1.1 伴隨多型的可互換物件   面向物件程式設計語言使用了後期繫結的概念。當向物件傳送訊息時,被呼叫的程式碼直到執行時才能確定。也叫動態繫結。   編譯器確保被呼叫方法的存在,並對呼叫引數和返回值執行型別檢查(Java是強型別的語言,無法

JAVA從零開始學習2

一、JAVA基本資料型別 JAVA的兩大資料型別 內建資料型別 引用資料型別 內建資料型別 Java語言提供了八種基本型別。六種數字型別(四個整數型,兩個浮點型),一個字元型別,還有一種布林型。 byte:(類比char) byte資料型別是8位,有符號的,以二進

JAVA程式設計思想學習筆記操作符

操作符 別名問題 先來看段程式碼,猜猜最後輸出的是什麼: class Test{ int t; } public class A { public static void main(String[] args) { // TODO Auto-gener