java常见报错整理
报错 1. Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
原因:没导入 java 的 JRE 库
解 决方案:把 java 的类库加载进去,在工程上右键选择属性(properties)->Java Build Path : Libraries->Add Library 选择 JRE System Library-> 点击 Next-> 选中:workspace default jre(或选择 Execution environment 并选择版本)-> 点击 Finish。
报错 2.eclipse: 在 debug 模式下启动很慢,直接 run 启动正常
原因:设置的断点太多,以 debug 模式启动时,发生了读取文件错误,以至于不能正启动
解决办法:window"-------show view------other-------Debug
debug—>breakpoint-------->Remove all 重新启动就好了
3.post 400 (Bad Request)
原因(1): 提交表单数据类型与 model 不匹配 (前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装)
如 springmvc 在接收日期类型参数时, 如不做特殊处理 会出现 400 语法格式错误
解决:在 get 方法上加时间格式化注解(该格式类型和前台页面所传的日期格式相同):@DateTimeFormat(pattern = "yyyy-MM-dd")
@Column(name="CONTROLLOLDER_VALIDITY")
@DateTimeFormat(pattern = "yyyy-MM-dd")
public Date getControllHolderValidity() {
return controllHolderValidity;
}
4. 直接在 Service 或 Dao 层:调用 Persist() 或 Merge 等方法,不报错,也不插入数据库:
如:
1 @Service 2 @Transactional(rollbackFor=Exception.class) 3 public class BaseMerchantCheckService extends DefaultQuasService<BaseMerchantCheck,String> { 4 @Autowired 5 private RoutePayforminfoConfigService routePayforminfoConfigService; 6 @Autowired 7 private RouteForwardConfigService routeForwardConfigService; 8 public void saveInfo(BaseMerchantCheck baseMerchantCheck,RoutePayforminfoConfig routePayforminfoConfig, RouteForwardConfig routeForwardConfig){ 9 persist(baseMerchantCheck); //该方法不能将 entity 保存进数据库 10 routePayforminfoConfigService.persist(routePayforminfoConfig); //该方法可以保存进数据库 11 routeForwardConfigService.persist(routeForwardConfig); //该方法可以保存进数据库 12 // this.merge(baseMerchantCheck); 13 // routePayforminfoConfigService.merge(routePayforminfoConfig); 14 // routeForwardConfigService.merge(routeForwardConfig); 15 } 16 }
原因:直接通过 persist()或者 this.persist() 调用该保存方法,是没有没有通过 Spring 注入事务的,所以不发保存进数据;
解决方法:(1)jpa.persist();
(2) @Autowired
private RouteForwardConfigService routeForwardConfigService; 通过这种方式注入;
5.eclipse->Help->eclipse marketplace: 打不开,提示
Cannot install remote marketplace locations: Connection failed
This is most often caused by a problem with your internet connection. Please check your internet connection and retry.
解决方案是修改 eclipse.ini,然后重启 eclipse
-vmargs
-Xmx512m
...
-Djava.net.preferIPv4Stack=true
6. 导入 maven 项目到 eclipse:pom.xml 第一行报错:org.apache.maven.archiver.mavenarchiver.getmanifest
原因:是 eclipse 的 maven 插件存在问题:maven 的配置文件不是最新的
解决办法:
1. 安装插件:help ->Install New Software -> add:http://repo1.maven.org/maven2/.m2e/connectors/m2eclipse-mavenarchiver/0.17.2/N/LATEST/
-> 点击 next 前,将 eclipse Install 窗口右下角的 Contact all update sites during install to find required software 选项取消掉 -> 一直 next confirm 安装更新 提示重启 eclipse。
2. 选中项目,右键 maven update project。
(参考自:https://blog.csdn.net/m0_37355951/article/details/72954015)
7. 加注解:@Component 无效,运行项目报错:No qualifying bean of type [kklazy.reportquery.service.DbPropertiesService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
原因:@Component 导包错误:导的不是 spring 的包,是 import org.osgi.service.component.annotations.Component;
改正:导入 Spring 框架的包:import org.springframework.stereotype.Component;
8.Unsupported major.minor version 52.0 解决办法(参考自:https://blog.csdn.net/superit401/article/details/72731381)
stanford parser 和 jdk 版本对应关系:J2SE 8 = 52,J2SE 7 = 51,J2SE 6.0 = 50
一般情況下需要先查看配置的版本是否一致:
1)看看你系统的 jdk 环境变量配置的是 jdk 那个版本
2)Windows—— Preferences——Java——Compiler——设为 jdk1.8
3)在此页面的 Java——Installed JREs——设为 jdk1.8
4)关闭此页面,项目右键(或者 core 包)——Build Path(也可是 Properties)——Configure Build Path——Java Build Path——Libraries 下面的 JRE System Library 改为 jdk1.8(此处设置见参考 3),保证旁边的 Order and Export 这个 jdk 与之相同
5)同页面的 Java Compiler 选项改为 jdk1.8
6)同页面的 Project Facets——右侧的 Java 改为 1.8(此项也可以不改)
7)如果上述还不管用的话试试:
修改 org.eclipse.wst.common.project.facet.core.xml:
打开项目所在的文件夹,打开.settings 文件夹,修改里面的“org.eclipse.wst.common.project.facet.core.xml”文件
如我的路径是:D:\cctv5cms\maven.1490956540309\cms-cms\cms-core\.settings\org.eclipse.wst.common.project.facet.core.xml
(8)如果上述步骤都已经版本统一,还不管用的话,检查 pom 文件中是否配置 jdk 版本,如果有,改为统一版本。代码如下:
或者:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
(9)如果上述所有步骤都执行还是不行,俺就要考虑 java 框架使用的版本是否支持该 jdk 的版本,比如:
jdk1.7 不支持 springboot 最新版本 2.0.0 以及以上的版本
配置好 springboot 项目之后启动程序,出现如下错误,是 jdk 版本与 springboot 版本不兼容导致的,也可以说是因为使用了默认的系统中的 jdk 且版本太低,不能编译执行高版本的 springboot 程序
9.java 项目上出现红色感叹号!,不能运行
(1)一般情况下:出现红色感叹号“直接右击项目–>build path–>Configure build path 找到 Libraries 这一项 ,看看哪个 jar 包报错删了 clean 一下就好了。
(2)但是本人打开 Libraries,没有出现任何报错的 jar. 这个时候就需要打开:窗口中的 MarKers 分页(或者通过主菜单 window—>show view –>markers)/ 或者 problems 分页,终于发现存在的错误:project is missing required library
然后本人搜了下:出现这种情况的原因是在你的 project 的 build path Library 中存在重复并且冲突的 jar 包,解决方案: 1、右击你的 project——>Build path——>Configure build Path; 2、在弹出的窗口中选择,Library 标签页; 3、在下面所列出的 jar 包中寻早相互重复、冲突的 jar 包,删除之; 4、点击确定关闭窗口,在 eclipse 自动重新 build workspace 后问题就解决了。
这时候我重新打开 Libraries: 出现了错误的包,竟然 出现了错误的包,估计是我电脑刚才睡着了。。。。。----》remove-->apply--->OK---->project:build project ===========》问题解决,(^-^)V
10.Exception in thread "main" java.lang.UnsupportedClassVersionError: runjettyrun/Bootstrap : Unsupported major.minor version 52.0
Exception in thread "main" java.lang.UnsupportedClassVersionError: runjettyrun/Bootstrap : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:792) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355)at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
现在总结的原因是 jdk 和 jre 的版本不一致造成的。
(1) 右击项目 -》properties-》java compiler:
(2)jre 版本:window->Preference->java->Installed JREs,之前 1.8,现改成 1.7。如图
(3)查看系统环境:java -version:是否是 1.7,若不是,改成 1.7
(4)最后使用 jetty 运行 run, 还是不支持,查看 jetty 版本:Run Configucations: 如图,修改成 6.1.26. 重新启动项目,OK,启动成功
11.Jdk8 安装后,重新安装 jdk1.7, 环境变量 java_home 重新设置后,linux 命令:java -version依然是 1.8。
(1)查看命令行重启了没:修改环境变量是需要重启命令行的。
(2)若已经重启。那然后命令行输入:where java 结果如下图
这是因为安装完 1.8 后,并创建在 C:\Program Files (x86)\Common Files\Oracle\Java\javapath\ 这个目录中,安装程序会自动将这个路径设置到环境变量的系统属性 Path 中,所以如果我们新设置的路径没有放在它的前面,就会出现不起作用的情况。
解决办法:删除 path 中 C:\ProgramData\Oracle\Java\javapath,或者将要生效的 jdk 路径放在其前面。
如图,把 %java_home%\bin 移到 C:\Program Files (x86)\Common Files\Oracle\Java\javapath 前面,重新输入命令行 java -version,果然,生效。