Java开发问题汇总
2.Could not load native libraries
3.Cannot resolve method ‘iterator’ in ‘Map’
在一个 Map 对象上调用 iterator() 方法,提示这个问题。
4.Non-static method cannot be referenced from a static context
这个问题真是非常的奇怪,就是在idea中编写lambda表达式,总是无法实现类型推断,例如下面的代码,理论上这么写应该是已经知道了 VFielaName,vField 的类型,但是在idea中就是会报错。vField 变成了 Object 类型,没有 .label 属性。
1 | vLayer.fields.forEach((vFieldName, vField) -> { |
像下面这种代码,Map.Entry::getKey, Map.Entry::getValue 就会报:“Map.Entry::getKey, Map.Entry::getValue” 错误。
1 | this.layerGeometryTypeMapping.forEach((layerId, geometryTypes) -> { |
【解决方案】
其实我是从源头解决这个问题,比如 layerGeometryTypeMapping 这是是map,那就直接写成 Map<String,Integer> t, 而不是 Map t。
1.Non-static method cannot be referenced from a static context in java 8 streams 这里说是 idea 的一个bug,已经在2017版本解决了,我现在使用的是2023版本,不应该出现这个问题啊。
2.idea使用1.8版本jdk但是使用lambda表达式报错 基本上都是这个套路,就是设置 Moules 的 Language level。
3.Intellij IDEA使用 lambda表达式报错-source1.5中不支持lambda表达式
4.JDK1.8新特性(三):Lambda表达式,让你爱不释手
5.idea中项目启动 出现不兼容的类型,无法推断类型变量问题 设置了 Project Stucture 和 SDKs 两个。
5.找不到或无法加载主类 Application
在使用 maven-jar-plugin 插件打包后,显示找不到主类,但是我的jar包下明明有 Application.class。
【解决方案】
最后的解决方案就是修改配置,注意 “/C:/Program%20Files%20(x86)/ArcGIS/Desktop10.2/java/lib/arcobjects.jar”,不能写为:“C:/Program Files (x86)/ArcGIS/Desktop10.2/java/lib/arcobjects.jar” 否则就会出现问题。
1 | <build> |
1.IDEA 错误 找不到或无法加载主类(完美解决)
2.Maven maven-jar-plugin
3.maven pom 配置 学习笔记(五)之 maven-jar-plugin
4.maven 打包jar 找不到主类 主类不在 jar 包的根目录下:如果主类不在 jar 包的根目录下,可能会出现找不到主类的错误。请确保主类在 jar 包的根目录下,或者在 pom.xml 中配置正确的路径。
5.Manifest Entries
6.Maven 打包可执行 JAR
7.Maven工程产生Jar时Main-Class和Class-Path的配置文件 由于某些原因,如果maven生成的MANIFEST.MF中的Class-Path的内容缺少一些内容,比如当前执行目录(.),那么可以通过上面manifestEntries的方式增加进来
6.SLF4J: No SLF4J providers were found
我用的是 2.0.7 的版本。
【解决方案】
将pom.xml中的slf4j-api的版本改成1.7.26
1.SLF4J: No SLF4J providers were found.解决方法 将pom.xml中的slf4j-api的版本改成1.7.26
2.slf4j: no slf4j providers were found. slf4j: defaulting to no-operation (nop) logger implementation
7.SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”
在执行 jar 的时候,出现了这个问题,我很纳闷啊:“SLF4J: Defaulting to no-operation (NOP) logger implementation”
【解决方案】添加了 slf4j-simple 配置。 最后的解决方法,就是使用了下面的三个依赖。
1 | <dependency> |
1.SLF4J: failed to load class org slf4j impl staticloggerbinder
2.SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”
3.解决方法: SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”. SLF4J: Defaulting to no-operation (NOP) logger implementation
8.PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
在我向一个https域名推送数据的时候,出现了这个问题。我在浏览器中打开这个 https 链接,显示的就是不信任的证书。
【解决方案】
解决方案就是创建一个信任任何证书的。
1 | /** |
1.解决 java 使用ssl过程中出现”PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExcep
2.异常:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExce
3.Solve “pkix path building failed” 这里讲了原因还有解决方式,就是用起来比较费劲。
4.解决HttpClient 请求https 出现PKIX path building fail 使用忽略证书请求,这里包括了相关的代码,可以进行参考。
9. Type definition error: [simple type, class org.joda.time.DateTime]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Joda date/time type org.joda.time.DateTime
not supported by default: add Module “com.fasterxml.jackson.datatype:jackson-datatype-joda” to enable handling
在将 yyyy-MM-DD HH:mm:ss 格式的时间转换成java DateTime类型的时间时出现了问题。
【解决方案】
在实体类注解上增加
1 |
1.springboot 日期转化报错
10.Java 8 date/time type java.time.LocalDateTime
not supported by default
(1) 引入依赖
1 | <!-- support for "Java 8 Dates" --> |
(2) 注入 JavaTimeMoudle
1 | import com.fasterxml.jackson.databind.ObjectMapper; |
1.Jackson – Java 8 date/time type
java.time.LocalDate
not supported by default2.Jackson Error: Java 8 date/time type not supported by default
11.Unable to find a single main class from the following candidates
我在一个包里面引用了另外一个包里面的内容,结果导致打包的时候出现了错误。
【解决方案】
(1) 我发现了是因为 io.agora.sample.AccessTokenInspector, io.agora.sample.ChatTokenBuilder2Sample 等代码中,包含了 main 方法,需要删除。
(2) 还需要删除自模块pom.xml中的 spring-boot-maven-plugin
1.解决Unable to find a single main class from the following candidates
2.spring boot打包时Unable to find a single main class的解决方法
3.Spring Boot Maven Plugin打包异常及三种解决方法:Unable to find main class 项目内有两个带有main方法的类并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个main方法并且所在类都没有使用@SpringBootApplication注解)
4.maven package异常repackage failed: Unable to find main class 工具类,不需要main入口,可以直接删除pom.xml中的build标签;如果是子模块可以使用skip跳过spring打包
12.-source 8 中不支持 ‘<>’ 具有匿名的内部类
主要原因就是在 pom.xml 指定了 jdk 版本。
1 | <plugin> |
【解决方案】
把1.8改成1.9就行了。
13.no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator
【解决方案】
然后进入dto类中发现,代码中自定义了有参数的构造函数,导致默认无参构造函数失效,需要手动添加无参构造函数,用于对象的json序列化。
1.参数json序列化报错: (no Creators, like default construct, exist): cannot deserialize from Object value (no
2.反序列化报错:cannot deserialize from Object value (no delegate- or property-based Creator) 因为Json反序列化需要一个无参构造器。正常情况下JVM会默认给类加个无参构造器,我遇到这个场景是因为我主动给这个类加了一个有参的构造器,这就导致JVM不会再给这个类加无参的构造器了。所以才会报这个错。手动添加一个无参构造器即可解决问题。
3.接口请求报错cannot deserialize from Object value 单独使用@Data时是会创建对象无参构造方法的,加上@Builder之后,无参构造就没了 并且在对象内手动增加无参构造编译也不通过
4.@Data注解 有参构造和无参构造问题
5.接口请求报错cannot deserialize from Object value ObjectMapper在转化json为对象时,需要对象存在无参构造方法。而对象上增加了Lombok 的@Builder注解时,是不会增加无参构造方法的。使用@Tolerate 增加一个构造方法,在构造方法上增加注解,这是lombok提供的一个冲突兼容方式。
14.上传文件总是报错
系统运行运行着,结果就无法上传了,弄了很久都没有解决,但是报错又不是报的上传文件的问题,报的是其他的问题。
【解决方案】
最后我偶然间去查看服务器的磁盘使用情况,发现了根目录竟然满了,于是我就花了很大的力气开始解决这个目录的问题。
【1】.SpringBoot文件上传预览报错:The temporary upload location xxx is not valid with root cause
【2】.Linux 根分区快满了,这个方法快速定位!
【3】.解决linux根目录(系统盘)满的问题
15.上线接口慢
不知道为什么,使用 jeecgboot 的时候,后台接口请求总是特别的慢,上线部署之后,有些接口竟然能达到 7s 中,但是实际上我的网络也不是特别的差。
【尝试方案】
(1)借助于 AOP,我进行了接口请求时间的调用输出,可以查看每个接口的花费时间。
(2)我尝试了使用不同的数据库进行测试,发现线上的数据库确实很慢,但是本地数据库同样的接口却很快。
【1】.SpringBoot 接口:响应时间优化9个技巧 1、使用异步处理;2、缓存机制;3、数据库查询优化;4、使用数据压缩技术;5、使用WebFlux进行响应式编程;6、优化日志记录;7、利用索引优化数据库查询;8、使用连接池来管理数据库连接;9、使用Content Delivery Network (CDN) 加速静态资源加载
【2】.一次线上java应用响应时间过长问题的排查 看监控平台,有问题的机器,cpu占用很高,这。。。更不科学了。理论上,这应用cpu能到1%就不错了,现在居然80%,吓得我赶紧跑到机器上,top了一把,确实是java应用占用cpu很高。
【3】.为什么我的接口响应时间这么长?记一次接口响应时间过长问题排查 这里的aop,我们使用的是同步的方法,只有在aop执行完,接口才会返回,经过日志排查,发现@Log日志入库的时间,耗时2秒多,问题出现在系统日志入库这一步,进一步排查数据库问题mysql自带的库information schema中有张表 rocesslist,可以查看所有的进程,通过查看这张表的数据,发现有一个进程一直在定时执行,经过和同事的咨询沟通,有人写了个定时任务,定时入库数据,占用了数据库资源
【4】.导致数据库慢查询的12个常见原因,以及对应的解决方法。
16.No primary or single unique constructor found for interface
这里在上传文件的时候出现了这个问题。
【解决方案】
使用 jakarta.servlet-api 代替 javax.servlet。