工程/項目錯誤:常出現的可能的錯誤


 

本文只是博主在編寫過程中遇到的一些問題,歡迎大家留言繼續補充

 



一、開發工具相關錯誤:

01、引用別人的工程,出現的可能的錯誤

多半是因為jdk版本的原因,調整一下即可:

解決方法:Build Path ==> Configure Build Path… ==>Libraies==>找出其中帶紅叉那個jdk;Remove==>

然后添加自己使用的jdk版本:Add Library==>JRE System Library==>選擇自己的jre后點擊完成;

若仍然有錯,那么:Add Library==>Server Runtime==>選擇自己的tomcat后點擊完成;

如果這時你的項目里面沒錯了,但是項目上還是有紅叉的話,解決方案參考http://www.cnblogs.com/mmzs/p/8398109.html


02、eclipse開發servlet,HttpServletRequest報紅叉解決方案

開發一個Servlet,代碼和配置路徑都沒問題,HttpServlet居然報錯了!嚇壞我了,於是開始了,調錯之路。

解決方法:鼠標右擊項目工程——》Build Path——》點擊comfigure Build Path進入----->選擇java Bulid Path------>在左邊點擊Libraries--------->選擇Add Librar,在Add Library中選擇Server Runtime,點擊下一步Next。------>選擇Apache Tomcat,點擊完成。------>這時,在Libraries下可以看到Apache Tomcat了就可以點擊ok按鈕------>代碼出現的紅扠都消失了。


03、Eclipse啟動Tomcat,45S超時問題解決

解決辦法:將時間調大即可;然后保存修改,重啟動Tomcat;如果仍然報Timeout錯誤,繼續上述步驟將Timeouts下的Start值改大。


04、報錯:javax.servlet.ServletException: Error instantiating servlet class org.springframework.web.servlet.DispatcherServlet

這個主要是在maven配置項目時出現的錯誤,類似上面的這種報錯都可以用以下方式解決。

 解決方案;項目右擊-->properties-->Deployment Assembly-->add-->Java Build Path Entries-->導入所有依賴的Jar包,重新tomcat即可。


05、maven項目pom.xml文件報錯、或者沒有文件報錯,但是工程還是有紅叉的情況?

解決辦法: 使用 maven-compiler-plugin 將 maven 編譯級別改為 jdk1.6 以上:

 1 <build>  
 2     <plugins>  
 3         <!-- define the project compile level -->  
 4         <plugin>  
 5             <groupId>org.apache.maven.plugins</groupId>  
 6             <artifactId>maven-compiler-plugin</artifactId>  
 7             <version>2.3.2</version>  
 8             <configuration>  
 9                 <source>1.7</source>  
10                 <target>1.7</target>  
11             </configuration>  
12         </plugin>  
13     </plugins>  
14 </build>  
在build中添加插件,修改jdk版本

如若不能解決,試試以下辦法:

maven配置文件不是最新的問題maven中pom.xml的war報錯解決方法


06、Maven項目下update maven后Eclipse報錯:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

問題背景:
工程為maven工程,ContextLoaderListener類位於spring-web-3.1.0.RELEASE.jar包中。檢查了maven的pom.xml,依賴引入正常。在工程Maven Dependencies視圖中也能看到spring-web-3.1.0.RELEASE.jar包被正常引入進來了。
錯誤原因:
進入到tomcat的部署路徑.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\下檢查了一下,發現工程部署后在WEB-INF文件夾下沒有生成lib目錄,正常情況下,會生成lib目錄並把工程的所有依賴jar包都部署到該目錄下。
解決方案:
1.右鍵點擊項目--選擇Properties
選擇Deployment Assembly,在右邊點擊Add按鈕,在彈出的窗口中選擇Java Build Path Entries
2.點擊Next,選擇Maven Dependencies
3.點擊Finish,然后可以看到已經把Maven Dependencies添加到Web應用結構中了


07、nested exception is java.lang.OutOfMemoryError: PermGen space

解決方案:
方案一:
eclipse中:
依次點擊:Window--->Preferences--->Java--->Installed JREs--->選中自己使用的jre--->Edit--->在Default VM arguments這一欄添加如下內容:
-server -Xms512M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=512M -XX:MaxPermSize=512M
然后保存退出,重啟tomcat生效。
方案二:
到tomcat/bin的目錄下,找到catalina.bat文件(這個是window文件,如果是linux系統,則修改的是catalina.sh文件)用文本編輯器打開,

cygwin=false(linux系統)上

添加下面這一行:
JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m -XX:MaxNewSize=256M"

解釋一下各個參數:
-Xms4096M:初始化堆內存大小(注意,不加M的話單位是KB);
-Xmx4096M:最大堆內存大小;盡量將Xms和Xmx兩個設置為一樣的,這樣可以避免堆內存擴展,減少申請內存的時間;
-XX:PermSize=512M:初始化類加載內存池大小;
-XX:MaxPermSize=2048M:虛擬機的最大類加載內存池大小;盡量將PermSize和MaxPermSize兩個設置為一樣的,這樣可以避免擴展內存,其實也可以說不允許擴展內存;
-XX:MaxNewSize=256M:永久代的內存上限,在HotSpot虛擬中就相當於方法區的內存上限;
還有一個-server參數,是指啟動jvm時以服務器方式啟動,比客戶端啟動慢,但性能較好,大家可以自己選擇。


08、Unsupported major.minor version xxx

錯誤原因:jdk版本不一致問題

解決辦法:將配置文件的jdk版本都統一


09、Unable to start embedded container;

錯誤原因:應該是和jar包沖突有關,但找了半天也沒找着沖突的jar包是哪個,但是jar包肯定跟tomcat有關,后來有個帖子說IDE集成tomcat會有影響,這個報錯之前,我剛把Eclipse配置了RuntimeEnvironments,所以我再次把他去掉,問題解決。

解決辦法:Eclipse-->Windows-->perferences-->RuntimeEnvironments-->將tomcat去掉


10、在Eclipse中建立好一個Maven項目后,如果Java Resources資源文件下沒有src/main/java文件夾

解決辦法:在項目上右鍵選擇properties-->java build path-->Add Library...-->JRE System Library-->workspace default jre


11、eclipse的.properties文件中文顯示問題

 解決辦法:Window-->General-->Content Types-->Text-->Java Properties File-->*.properties(locked)--->Default encoding:UTF-8-->Update


12、Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project child02

詳見:http://www.cnblogs.com/mmzs/p/8761417.html


13、

 



二、數據庫的錯誤:

01、java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

網上網友的解決方法有: 大概3種,一種認為是要修改root的密碼,一種認為是遠程連接的權限被限制了,一種是通過寫一個文件在Dos里面運行實現。

我的這個問題的一種解決方法:為當前用戶(我的是root用戶)添加對該表的管理員權限,即可;因為用了可視化的sql管理工具,很容易就解決了問題。


02、Java程序向MySql數據庫中插入的數據變成了問號

在確認自己的頁面是使用utf-8、數據庫和表的編碼格式是utf8時;修改配置文件my.ini

[client]

port=3306

[mysql]

default-character-set=utf8


# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this
# file.
#
[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306


#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"

#Path to the database root
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

# The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=utf8

然后:開始-->運行-->輸入:services.msc,打開“服務”,找到MySQL服務,右鍵重啟即可。

也可在可視化工具中:查詢數據庫和表的編碼格式

mysql> SHOW VARIABLES LIKE 'character%';

+--------------------------+-----------------------+
| Variable_name | Value
+--------------------------+-----------------------+
| character_set_client | utf8 *客戶端使用的編碼
|
| character_set_connection | utf8 數據庫連接時使用的編碼
|
| character_set_database | utf8 數據庫用的編碼
|
| character_set_results | utf8 *查詢結果集用的編碼
|
| character_set_server | utf8 服務器使用的編碼
|
| character_set_system | utf8 系統使用的編碼

告知服務器客戶端使用的編碼:  SET character_set_client=gbk;
告知服務器返回的結果集請使用UTF8: SET character_set_results=gbk;


03、linux中啟動mysql數據庫報錯

第一種情況:
MySQL server PID file could not be found!                  [FAILED]
Starting MySQL...The server quit without updating PID file [FAILED]ydata/centossz008.pid).


第二種情況:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
錯誤信息

第二種情況:

錯誤原因:權限問題

解決辦法: chown -R mysql.mysql /software/mysql-5.5.32

第一種情況:

錯誤原因:MySQL默認是開啟了日志文件的,如果數據操作比較頻繁就會產生大量的日志,在/usr/local/mysql/var/下面產生mysql- bin.0000* 類似的文件,而且一般都在幾十MB到幾個GB,更甚會吃掉整個硬盤空間,從來導致mysql無法啟動或報錯。

解決辦法:

解決方法a、徹底禁用MySQL日志:修改/etc/my.cnf 文件,找到

log-bin=mysql-bin
binlog_format=mixed

再這兩行前面加上#,將其注釋掉,再執行/etc/init.d/mysql restart即可。
如果實在想保留日志,可以在/etc/my.cnf里加入
expire_logs_days = 30
然后重啟mysql,這樣30天就會自動清理日志。

網上有不少這個原因的解釋,但是都不是我想說的。
data/mysql-bin.index 沒有刪除,data/mysql-bin.index是存放日志文件索引的文件,只刪除了日志文件而沒有對日志的索引文件做處理顯然是不行的。

刪除data/mysql-bin.index文件,再service mysqld start就可以了。

解決方法b:


04、

 



三、開發錯誤: 

01、報錯:java.lang.ClassNotFoundException:

 首先確認你的jdk安裝路徑是配置的沒問題:

配置JDK環境:

JAVA_HOME:D:\software\JDK1.7
Path:%JAVA_HOME%\bin;%JAVA_HOME%\lib;

然后出現的問題就是找不到jar包;

所以博主提供一種最簡單的解決方式:將所需jar包導入到如下目錄:D:/software/jdk1.7.0_79/jre/lib/ext 即可;

但是在直接使用java -jar Test.jar命令運行時,可以成功;

但是有時開啟你的hdfs的集群時會報

ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: 
2017-12-07 12:07:54,549 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2017-12-07 12:07:54,555 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG: 

類似的錯;原因就是包導入的問題,所以你需要將D:/software/jdk1.7.0_79/jre/lib/ext 下的某些包刪掉即可;


02、報錯:org.apache.ibatis.exceptions.PersistenceException:

### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.panda.test1.User with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.panda.test1.User.<init>()  

錯誤原因是,User.java類中沒有默認的無參構造函數,加上無參構造函數后,錯誤消失。

解決方案:1. model中的get/set方法與成員變量不一。
2. 構造函數被重載過,但是沒有空的構造函數。
3. 最好不要使用簡單類型,如int, long等,改用對象模式Integer, Long等。在寫條件查詢時會用到判斷<if xxx != null > … </if>的


03、org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error resolving JdbcType.

Cause: java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.NUMBER

java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.int

錯誤原因:Mybatis中jdbcType整形應該為NUMERIC

解決辦法:

JDBC Type           Java Type  
CHAR                String  
VARCHAR             String  
LONGVARCHAR         String  
NUMERIC             java.math.BigDecimal  
DECIMAL             java.math.BigDecimal  
BIT             boolean  
BOOLEAN             boolean  
TINYINT             byte  
SMALLINT            short  
INTEGER             int  
BIGINT              long  
REAL                float  
FLOAT               double  
DOUBLE              double  
BINARY              byte[]  
VARBINARY           byte[]  
LONGVARBINARY               byte[]  
DATE                java.sql.Date  
TIME                java.sql.Time  
TIMESTAMP           java.sql.Timestamp  
CLOB                Clob  
BLOB                Blob  
ARRAY               Array  
DISTINCT            mapping of underlying type  
STRUCT              Struct  
REF                         Ref  
DATALINK            java.net.URL[color=red][/color]  
Mybatis中javaType和jdbcType對應關系

04、org.apache.ibatis.cache.CacheException: Error serializing object.  Cause: java.io.NotSerializableException: cn.mmzs.mybatis.po.User

錯誤原因:pojo類沒有實現java.io.serializable序列化接口


05、iBatis查詢結果部分為null的解決辦法

解決辦法:

將查詢的結果都起別名,而且這些別名不是隨便起的,別名對應於TCard類的屬性,這樣才能成功查到結果:

select a.T_ID as tid, a.START_NUM as startNum, a.END_NUM as endNum from T_CARD a 

06、maven項目的pom.xml文件報錯?

解決辦法: 點這里


07、jsp中引用js文件時,動態生成的id,通過jquery的id選擇器來獲取;不但獲取不到,而且不能在另外一個函數中使用?

解決辦法:將id換成onclick;從而定義一個函數,新建一個函數,這樣子就能使用那個函數了。


08、java.util.LinkedHashMap cannot be cast to com.mmzs.entity.PageEntity

錯誤提示:PageEntity pageEntity = (PageEntity) ((Map<String, Object>) map).get("pageEntity");

錯誤原因:上面面的方式不能強轉成實體類,因為LinkedHashMap和實體類都實現了序列化接口

解決辦法:PageEntity pageEntity = JSONObject.toJavaObject((JSON) JSON.toJSON(((LinkedHashMap)map).get("pageEntity")), PageEntity.class);


09、HTTP Status 500 - Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

錯誤原因:.xml文件沒加載起,很可能是配置出了問題,或者一不小心改動了配置

解決辦法:http://www.cnblogs.com/mmzs/p/8757709.html

10、sql語句沒問題,但是其中有一個字段查詢出來是空?

解決辦法:檢查構造方法


11、實體類轉化出錯: disable SerializationFeature.FAIL_ON_EMPTY_BEANS

報錯:(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.mmzs.cloud.entity.User_$$_jvst73b_0["handler"])

解決辦法:在實體類上面加上注解 @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })


 

12、

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM