admin管理员组文章数量:1639831
常见异常
空指针异常: NullPointerExeption
类型转换异常:ClassCastException
数组下标越界异常:ArrayIndexOutOfBoundsException
数字格式化异常:NuberFormatException
文件找不到异常:FileNotFoundException (编译时)
不支持序列化:NotSerializableException
序列化版本号不一致:InvalidClassException (无效的类异常)
IllegalMonitorStateException:异常发生是由于程序员没有注意notify(),notify(),wait()方法的使用条件,没有真正理解线程同步机制。如果当前的线程不是此对象锁的所有者,却调用该对象的notify(),notify(),wait()方法时抛出该异常。
Wrong number of parameters: expected 6, was given 5
SQL:错误的参数数量:需要6个只传了5个
java.lang.RuntimeException: Unknown column 'id1' in 'field list' Query
表中没有此字段:id1
导入scanner时:
2021.12.29
import jdk.nashorn.internal.parser.Scanner; //错误?
import java.util.Scanner; //正确
辨别用户输入的是否为int,否则重新输入
public static void main(String[] args) {
public static void main(String[] args) {
Scanner scanner; //声明类型,不赋值
int i;
System.out.println("请输入数字:");
while(true){
scanner = new Scanner(System.in); //关键,写在循环内
if(scanner.hasNextInt()){
i = scanner.nextInt();
return; //结束循环
}
System.out.println("输入错误,请重新输入!");
}
}
方法递归调用时:
1.5
错误:该程序始终返回false
//递归查找每一个节点,返回,int 下标
public boolean queryNode(Node node,Object data){
if(node.equals(data)){
return true;
}
if(node.next!=null){
queryNode(node.next,data); // ←——没有return,结果并未成功返回
}
return false;
}
修改后:
//递归查找每一个节点,返回,int 下标
public boolean queryNode(Node node,Object data){
if(node.equals(data)){
return true;
}
if(node.next!=null){
return queryNode(node.next,data); // ←——添加了return
}
return false;
}
原因,举例说明:
public static void main(String[] args) {
//使用递归写一个方法,查找数组中是否存在某个元素
int[] a = {1,2,3,4,5,6};
System.out.println(query(a,6));
}
static int index = 0;
public static boolean query(int[] r,int i){
if(index < r.length){
if(r[index] == i){ //如果找到该元素,返回true
return true;
}
if(r[index] != i){ //没有找到该元素,递归继续查找
index++;
query(r, i); //关键,递归后的结果并没有继续返回,程序将会继续进行
}
}
return false; //以至于程序永远返回false
}
equlse、"=="
如果两个变量进行比对时结果发生错误,请务必检查二者是否为同一类型。
很有可能误将内存地址当做内容进行判断
引用变量不能使用“==”进行判断
使用增强for循环(forach)时:
错误:数组下标越界
for (int i :arr){
System.out.println(arr[i]);
}
正确:
// for (int i :arr){
// System.out.println(i);
// }
xxx instanceof List 判断错误时:
代码没有错误,反序列化时判断对象是否为集合却为false
原因:导入了错误的包,(导入了之前学习笔记中的List类)
总结:以后类名避免使用List、TreeMap、Map等关键字,以免误用
Comparable 实现接口、重写方法后报错
Class 'Student' must either be declared abstract or implement abstract method 'compareTo(T)' in 'Comparable'
原因:没有加入泛型
synchronized
synchronized的位置很重要,如果同步代码块内有循环,在循环结束之前都不会解锁。
锁循环:
锁方法:
将火车售卖程序套用消费者、生产者模式时: IllegalMonitorStateException
官方的解释:抛出该异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器,然而本身没有指定的监视器的线程。
也就是当前的线程不是此对象监视器的所有者。当前线程要锁定该对象之后,才能用锁定的对象执行这些方法,这里需要用到synchronized关键字,锁定哪个对象就用哪个对象来执行notify(), notifyAll(),wait(), wait(long), wait(long, int)操作,否则就会报出IllegalMonitorStateException异常。
此处同步代码块监控的属性为ticket 车票,
而多线程车票售卖程序并未进行修改,synchronized作为修饰符时,监控指定的为this 当时的this为saleThread(车票售卖线程)对象,没有监控ticket,因此无法对ticket使用wait方法。
修改售卖程序时,调用了ticket对象.notify、wait方法,因此出现大片爆红。
修复BUG:
@Test测试单元不能存在有参构造
异常信息: Test class should have exactly one public zero-argument constructor
可以通过配置修改,详见万能青年
IDEA——万能青年操作指南_焰火青年·的博客-CSDN博客
i++ 与 ++i
count++ 为先执行后赋值,所以统计次数依旧是1
统计字母次数
开发提示:可以使用Map,key是字母,value是该字母的次数
效果演示:例如:String str = "Your future depends on your dreams, so go to sleep.";
Mysql & JDBC
XML解析时报红:
发生了非法的反射访问操作
原因:使用了高版本的JDK11.
解决方案:An illegal reflective access operation has occurred_lizz666的博客-CSDN博客
JDBC 增删改查中 占位符不需要'?' 包裹
JavaWeb
CSS样式无法渲染问题:
项目名错误,改为th获取项目名访问
项目文件增加时候缓存问题:
如果还是不行,直接把源码复制到项目路径
web文件夹在,web项目图标没了,重命名导致异常,手动添加Web
之后可能需要更新
项目在,war包不见了 — 手动导入
注:之后需要在Tomcat内重新配置
Thymeleaf —— 500报错,地址出问题
1.如果500报错,前缀 后缀没有问题,就是逻辑视图问题,请检查web.xml配置文件与视图基础类 对象中的参数名是否匹配,前后缀与processTemplate()传入的参数是否正确。
2.如果出现其他未知问题,可能是Toncat、Jar包、jdk版本兼容性问题。
Vue引入错误 :Uncaught ReferenceError: Vue is not defined
产生原因:没有正确引入vue.js文件
解决方案:
1.检查自己引入的文件的路径是否书写正确
2.尝试重构,服务器端文件没有载入Vue
书城六:由于Fliter 配置路径导致无法重定向到自己的404页面
原因:因为页面跳转时为了被异常Filter 捕获加入了protected,导致地址编号,Thmeleaf无法成功解析 。
解决:把error移出WEB-INF,使用重定向的方式跳转404页面。(WEB-INF内文件只能请求转发)
DBUtil ,解析到了对象,但属性值全部为null
原因:实体对象getset错误使用了Builder方式自动生成,导致BeanListHandler 无法解析?
(实体类时用了一下,忘记修改回来)
修改后:
Maven
web.xml还在,Maven消失了
选中pom.xml 配置文件,添加作为Maven的项目
Maven pom.xml图标变成了灰色 或 添加了依赖但不起作用
原因:操作的时候不小心点到了ignore pom.xml
即pom.xml文件被设置在maven忽略文件清单中
解决方案:
电影表单:首页访问500,web.xml配置总控制器没问题,springmvc.xml视图控制器没问题,jar包没问题
An error happened during template parsing (template: "ServletContext resource [/WEB-INF/templates/portal.html]")
Could not open ServletContext resource [/WEB-INF/templates/portal.html]
最后发现templates,文件夹少了个l
导致Thymeleaf视图解析失败!!!!!@!@!!!
idea启动时,显示8080端口被占用
1、win+R打开window窗口,执行命令:netstat -ano
1、window+R,输入cmd,回车启动
2、输入netstat -ano | findstr 8080 (如果是其他端口就改一下)
3、输入taskkill /pid 19112 /f (这个19112是对应上一条语句搜索出来的PID)
2、执行命令:tasklist
根据PID确定是哪一个进程
3、通过任务管理器,终止进程
4、重启tomcat
Maven 设置编码问题
在父项目版本管理中加入
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
网页404
检查 命名、注解、配置文件扫描包、端口、ip、视图前后缀配置!!
Git push报错: error: failed to push some refs to ‘https://gitee/
在 git 执行命令git push origin master时,报错error: failed to push some refs to ‘https://gitee/
根本原因是远程仓库和本地仓库内容不同,将远程仓库中不同的内容pull到本地,就好了。
比如,我是新建了一个远程仓库,准备把本地内容上传时,忘记把远程仓库的redme.md文件同步出错的。
解决方法:
git pull --rebase origin master
将redme.md文件同步到本地,然后再次执行git push origin master就好了
类型不匹配问题 Required type:Role Provided:Rule!!
没有看清,u和o。以后遇到这种问题,首先排查是否导错包!名字是否错误!找不同!!
然后发现service层也错了!全错了!
503:映射重复
Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'roleController' method
com.atguigu.controller.RoleController#index(HttpServletRequest, Map) 批量修改时注意,选择注解修改这里也是
org.springframework.web.servlet.DispatcherServlet' is not assignable to 'javax.servlet.Servlet,jakarta.servlet.Servlet'
IDEA SpringMVC web.xml报错 org.springframework.web.servlet.DispatcherServlet' is not assignable to javax.servlet.Servlet
解决方法:ProjectStructure-Dependencies-右上角绿色小加号-添加Tomcat的包即可
Dubbo,远程服务类,空指针
systemctl status NetworkManager 应该是active
systemctl disable NetworkManager 下次开机不会自动开启,现在没有关
systemctl stop NetworkManager 现在是开启状态,现在就关掉
systemctl start network.service 现在就开启network网络服务
reboot 重新启动
jetty 启动失败 [WARNING] Failed startup of context o.e.j.m.p.JettyWebAppContext@7f572c37{/, (学习Dubbo时)
报错:
正确的:
判断:Jar包问题,尝试清理仓库重新下载,clean,重新安装。
解决:引入Jar包顺序导致的!把dubbo相关的五个jar包移到下边,启动成功!
原理:未知。maven依赖添加顺序会影响????dubbo包含了spring某些jar包引起冲突??
Linux ip错了??
Mysql 远程访问失败
Nacos 集群部署时,持久化到Windows的本地Mysql,无法建立连接!
问题:ip、端口、用户名、密码全都正确,Mysql依旧无法远程访问!
org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
原因:root用户没有远程访问权限
解决:
1. 查看是否能远程调用:
mysql -u root -p -h 192.168.68.1
2. 不能访问,进行设置
mysql -u root -p登录数据库,use mysql 使用数据库
下面语句运行与mysql5.7及以前版本
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql 8版本执行下面语句
#Mysql8 创建用户
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
#进行授权
grant all privileges on *.* to 'root'@'%' ;
#刷新用户权限
FLUSH PRIVILEGES;
3. 执行查询,查看数据库当前有访问权限的信息 (或图形化界面查看)
SELECT User,Host FROM user;
4. 再次尝试远程调用,成功
mysql -u root -p -h 192.168.68.1
SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconn_焰火青年·的博客-CSDN博客
参考:MySQL允许root远程登录_小gu的博客-CSDN博客_mysql允许root远程连接
properties 配置文件中文注解??乱码
idea - tomcat控制台乱码 - 尝试在idea中设置 utf-8
Maven 父依赖 爆红,依赖始终下载不下来
原因:父依赖只是版本控制,由于子模块并未导入,所以依赖不会进行下载?
Autowired、OpenFeign爆红
请求https 报错 java.security.cert.CertificateException: No subject alternative DNS name matching hjy-frs.dev.wisdomin found.
证书过期了,找运维吧
端口被占用
The Tomcat connector configured to listen on port 8089 failed to start. The port may already be in use or the connector may be misconfigured.
-
【netstat -aon|findstr “端口”】 (最后一列为XXX 进程id)
-
【tasklist|findstr “XXX”】
-
taskkill /f /pid XXX
打开cmd命令行
Cannot call getInputStream(), getReader() already called
原因:request输入流只能被读取一次,再次获取会返回-1,拦截器中如何获取requestBody?
拦截器读取参数后,controller会报错:Cannot call getInputStream(), getReader() already called
解决:
1. 辅助工具类(读取流)
/**
* description:http辅助工具类
* @Date 2023/12/22 16:02
* @Author by:rty
*/
public class HttpHelper {
/**
* description:从request获取body的json数据
*
* @param
* @return
*/
public static String getBodyString(ServletRequest request) {
StringBuilder sb = new StringBuilder();
ServletInputStream inputStream = null;
BufferedReader reader = null;
try {
inputStream = request.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
/**
* description:从request获取body的json数据,并格式化成map形式
*
* @param
* @return
*/
@SuppressWarnings("all")
public static Map<String, Object> getBodyMap(ServletRequest request) {
Map<String, Object> params = new HashMap<>();
String bodyString = getBodyString(request);
if (StringUtil.isNotNullToObj(bodyString)) {
params = JSON.parseObject(bodyString, Map.class);
}
return params;
}
}
2. 包装body,处理类
/**
* 解决: request.getInputStream()只能读取一次的问题
* @Date 2023/12/22 15:47
* @Author by:rty
*/
public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
private byte[] body;
public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
// 将body数据存储起来
body = HttpHelper.getBodyString(request).getBytes(StandardCharsets.UTF_8);
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return new ServletInputStream() {
@Override
public int read() throws IOException {
return bais.read();
}
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
};
}
public void setInputStream(byte[] body) {
this.body = body;
}
}
3. 过滤器
/**
* 解决: request.getInputStream()只能读取一次的问题
* @Date 2023/12/22 15:31
* @Author by:rty
*/
@Order(3)
@Component
public class RequestWrapperFilter implements Filter {
private Logger log = LoggerFactory.getLogger(RequestWrapperFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException
, IOException {
ServletRequest requestWrapper = null;
if (request instanceof HttpServletRequest) {
requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request);
}
if (null == requestWrapper) {
log.error("过滤器包装request失败 返回原来的request");
chain.doFilter(request, response);
} else {
log.info("过滤器包装request成功");
chain.doFilter(requestWrapper, response);
}
}
@Override
public void destroy() {
}
}
启动类中加入过滤器
@SpringBootApplication(scanBasePackages = "cn.qtone")
@MapperScan("cn.qtone.dao")
public class VideoPhoneApplication implements WebMvcConfigurer
{
@Autowired
private CutOverInterceptor cutOverInterceptor;
public static void main(String args[])
{
SpringApplication.run(VideoPhoneApplication.class, args);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(cutOverInterceptor).addPathPatterns("/**");
}
}
版权声明:本文标题:Java开发常见异常|错误 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1729298013a1194844.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论