本文只是博主在编写过程中遇到的一些问题,欢迎大家留言继续补充! |
一、开发工具相关错误:
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>
如若不能解决,试试以下办法:
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.pluginsorg.eclipse.wst.server.core mp0wtpwebapps下检查了一下,发现工程部署后在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
# The TCP/IP Port the MySQL Server will listen on
#Path to the database root # The default character set that will be used when a new schema or table is |
然后:开始-->运行-->输入: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:softwareJDK1.7 |
Path:%JAVA_HOME%in;%JAVA_HOME%lib; |
然后出现的问题就是找不到jar包;
所以博主提供一种最简单的解决方式:将所需jar包导入到如下目录:D:/software/jdk1.7.0_79/jre/lib/ext 即可;
但是在直接使用java -jar Test.jar命令运行时,可以成功;
但是有时开启你的hdfs的集群时会报
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]
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" })