Java错误集锦

Java错误集锦

1. 错误: 仅当显式请求注释处理时才接受类名称 ‘BubbleSort’

Java错误集锦.assets\1600601821103.png

解决方案:编译时记得加上 .java后缀


2. 错误: 找不到或无法加载主类 BubbleSort

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JC5lSiNc-1613751539616)()]
Java错误集锦.assets\1600602015731.png

解决方案:

​ 参考链接1:狂神说Java-P48-命令行传参数

​ 参考链接2:Java————错误:找不到或无法加载主类


3. 数组下标溢出:ArrayIndexOutOfBoundsException

Java错误集锦.assets\1600602717201.png
解决方案:时刻注意下标的最大和最小值,注意下标是从0开始算的


4. 在场景图中,相同的元素不能存在多次:MultipleParentException

Exception in thread “main” javax.media.j3d.MultipleParentException: Group.addChild: child already has a parent
Java错误集锦.assets\1600685486627.png

解决方案:

参考链接1:https://answer-id.com/zh/52169847

参考链接2:https://bbs.csdn.net/topics/110005846

我的解决:
Java错误集锦.assets\1600685670130.png


5. 超出数据类型的取值范围:InputMismatchException

Exception in thread “main” java.util.InputMismatchException: For input string: “2147483648”
Java错误集锦.assets\1600926133406.png

解决方案:输入数据时注意自己定义的数据类型的取值范围即可


6. NPE异常:NullPointerException

NPE是指编程语言中的空指针异常:NullPointerException

编程语言中的空指针异常。当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:

  • 调用 null 对象的实例方法。
  • 访问或修改 null 对象的字段。
  • 将 null 作为一个数组,获得其长度。
  • 将 null 作为一个数组,访问或修改其时间片。
  • 将 null 作为 Throwable 值抛出。

应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。

  • 从以下版本开始:JDK1.0

Java错误集锦.assets/1603628690532.png

Java错误集锦.assets/1603628807316.png

解决方案:一定要注意对一些对象的初始化操作

参考链接:

一般报java.lang.NullPointerException的原因有以下几种

【Bug解决】java.lang.NullPointerException出现的几种原因以及解决办法


7. OOM异常:OutOfMemoryError

OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是说,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error(注:非exception,因为这个问题已经严重到不足以被应用处理)

参考链接1:什么是java OOM?如何分析及解决oom问题?

解决方案:


8. 类型转换异常:ClassCastException

String s = new Student();
// s 接收的类型应该是 String 类型,但是给它赋的值却是 Student 类

解决方案:如果两个类之间没有什么联系,说明不能强制相互转换,这个时候就会报错,只要让变量接收相应类型的值就行了。


9. 系统找不到指定的文件:java.io.FileNotFoundException

Java错误集锦.assets/1603861163686.png

参考链接1:java.io.FileNotFoundException: aaa.txt (系统找不到指定的文件。

参考链接2:java.io.FileNotFoundException: xxx.txt (系统找不到指定的文件。) 的错误解决办法

解决方案:注意 File() 构造函数的参数列表里的提示为 pathname ,指示是要传入一个文件路径名,所以将简单的文件名换成具体的文件绝对路径就可以了。

更新(2020年10月28日16:44:54):

注意到如果将文件放到项目的根目录,则传参时不用绝对路径也可以的!

Java错误集锦.assets/1603874776456.png

Java错误集锦.assets/1603875271613.png

我是在 IDEA 的资源管理面板看到了在项目根目录下有个 scoreAnalysis.txt 文件后推测出来的,以此为据,我后面将 score.txt 拷贝到 scoreAnalysis.txt 所在目录(也就是项目的根目录)后再次以 score.txt 为 new File() 的参数,发现可以正常运行!后来我把 score.txt 和 scoreAnalysis.txt 文件放到“F:\Prac_Java\JavaInCollege\experiment\src\exp10\lab01\files”路径下,然后以"experiment/src/exp10/lab01/files/score.txt" 和 “experiment/src/exp10/lab01/files/scoreAnalysis.txt” 为参数传入 new File()函数,结果也是正常运行!

Java错误集锦.assets/1603875877520.png

Java错误集锦.assets/1603875896226.png

说明 File(pathname)这个函数里的路径参数默认是项目根目录,在上面的例子中就相当于是“F:\Prac_Java\JavaInCollege\”(注意路径分隔符要么用单撇斜杠“/”,要么用双捺斜杠 “\\”),所以注意 experiment 前不用加路径分隔符了,否则Java还是会把 “/experiment/src/exp10/lab01/files/score.txt”当做一个文件名而报 “FileNotFoundException” 的异常。

Java错误集锦.assets/1603876623531.png

更新(2020年10月29日15:39:11):

Java错误集锦.assets/1603959579495.png

File file = new File("experiment\\src\\exp10\\lab03\\files\\book2.zip");

File dir = new File("experiment\\src\\exp10\\lab03\\files\\myBook");
......
System.out.println(file1.getAbsolutePath() + " 的内容:");
F:\Prac_Java\JavaInCollege\experiment\src\exp10\lab03\files\myBook\book2的内容:

报错信息:
java.io.FileNotFoundException: experiment\src\exp10\lab03\files\myBook\book2\txtFile.txt (系统找不到指定的路径。)

file1.getAbsolutePath() 函数获取的值就是下面这个路径:
F:\Prac_Java\JavaInCollege\experiment\src\exp10\lab03\files\myBook\book2,
对照实验书上的运行结果,路径的最后应该一个带有文件后缀(例如txtFile.txt),而这里却是 book2,排查后发现这个 book2 是压缩包里存放 txtFile.txt 的文件夹。

Java错误集锦.assets/1603959922343.png

同时,在 myBook 文件夹下也可以看到生成了 一个没有后缀的名为 book2 的文件,所以应该是由于压缩包里文件结构不合理导致的错误,程序把文件夹 book2 当成了要读取的文件,并把 book2 这个文件夹以文件的形式解压到了 myBook 文件夹下,而接下来的读取程序还是按照压缩包里的路径(book2\txtFile.txt)读取文件,自然就会找不到文件了。

所以关键还是要改变压缩包里的文件目录结构,即:在压缩包里没有子目录,只有我们要读取的文本文件 txtFile.txt

使用 book.zip 作为待读取的压缩文件后运行:

Java错误集锦.assets/1603960084367.png


10. 启动MySQL报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

Java错误集锦.assets/1605536460558.png

参考链接:启动MySQL报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

解决方案:安装MySQL服务,要是还没有解决,记得安装后一定要把这个服务手动启动(或者直接重启一下电脑,因为这个服务默认是自动启动的)

// 在MySQL的安装目录下输入以下安装命令
mysqld install
// 或是 mysqld -install

Java错误集锦.assets/1605536994630.png

Java错误集锦.assets/1605536982129.png


11. xxxx 服务正在启动 .xxxx 服务无法启动。服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。

Java错误集锦.assets/1605537771464.png

参考链接:windows 上安装解压版 mysql

Java错误集锦.assets/1605537942348.png


12.useSSL=true 【com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure】

The last packet successfully received from the server was 1,170 milliseconds ago.  The last packet sent successfully to the server was 1,151 milliseconds ago.

Exception in thread "main" java.lang.NullPointerException
	at chapter11.example.Eg11_1.main(Eg11_1.java:24)

Process finished with exit code 1

Java错误集锦.assets/1605600883243.png

解决方案:将 useSSL=true 改为 useSSL=false 即可正常运行。若要将useSSL设置为 true,则根据相关的提示,需要提供一些证书之类的东西。

Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

DeepL翻译:

不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果没有设置显式选项,则必须默认建立SSL连接。为了符合不使用SSL的现有应用程序的要求,verifyServerCertificate属性被设置为’false’。你需要通过设置useSSL=false来明确禁用SSL,或者设置useSSL=true,并为服务器证书验证提供truststore。

网上提供的原因是:MySQL在高版本需要指明是否进行SSL连接。

在 Navicat 中的连接设置中可以看到相关的SSL设置:

Java错误集锦.assets/1605601527999.png

而Navicat的官方文档中也有相关说明:

安全套接字层(SSL)

确保客户端和数据库之间的传输安全的另一种选择是SSL。它是最初为通过Internet传输私人文档而开发的协议。 SSL通过通过称为X.509证书的数字文档将网站和公司等实体的身份绑定到加密密钥对来工作。每个密钥对包括一个私钥和一个公钥。私钥保持安全,而公钥可以通过证书自由分发。因此,在建立安全连接之前,必须首先安装 OpenSSL库和来自可信机构的证书。

要在Navicat中提供身份验证详细信息,请启用“使用身份验证”并填写所需的信息:

  • 客户端密钥文件:
    PEM格式的SSL密钥文件,用于建立安全连接。
  • 客户端证书文件:
    PEM格式的SSL证书文件,用于建立安全连接。
  • CA 证书文件:
    PEM格式的文​​件的路径,其中包含受信任的SSL证书颁发机构的列表。
  • 指定的 Cipher:
    用于SSL加密的允许的Cipher列表。

其中的pem格式的文件,推测可能是MySQL产生的这些文件:

Java错误集锦.assets/1605601684735.png

但我没有具体测试,网上关于 useSSL=true或false的区别也没有说得很清楚。

更新(2020年11月19日12:52:13):

我又特意用官网的安装器 mysql-installer-community-5.7.32.0.msi 在自己电脑上安装了MySQL,测试了将 useSSL设置为 true,同时在Navicat中将相关的 SSL 设置弄好,结果还是和解压版的一样,当 useSSL为 true 时,还是出现上述的错误。于是我又把安装版的 MySQL 给卸载了,相关的注册表信息也删除了。

更新(2020年11月19日16:42:13)

当修改秘密时,MySQL会提示你开启 ssl 连接来保护安全

Java错误集锦.assets/1605775340734.png
参考链接1:使用 Navicat 远程管理数据库

参考链接2:mySql的连接useSSL=false


13. 安装MySQL服务以及初始化MySQL数据库的一些坑

Java错误集锦.assets/1605774030310.png

Java错误集锦.assets/1605774358168.png

另外,自己创建的数据库,会存储在data目录下,但是不能直接把相应的数据库给直接剪切或复制到其他MySQL数据库的data目录下使用。


14. IllegalMonitorStateException

F:\Prac_Java\JavaInCollege\experiment\src\exp12\lab02\Number.java

Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
	at java.lang.Object.notify(Native Method)
	at exp12.lab02.Number.setMessage(Number.java:47)
	at exp12.lab02.Number.run(Number.java:27)
	at java.lang.Thread.run(Thread.java:745)

Java错误集锦.assets/1608039624872.png

参考链接1:诡异的异常IllegalMonitorStateException

(更新:2020年12月17日16:58:47)

在俄罗斯方块这个程序中,想要查看“关于”板块信息时,也报出了这个错误


15. Java图形化界面中的中文乱码

之前碰到过一次,依稀记得网上有人说是因为 java.awt.*; 中的组件对中文的支持不大好,建议换成 javax.swing.* 中的组件,也就是在原先的那些组件类的前面加上一个大写的 J,如:Panel --> JPanel。修改老师给的那个俄罗斯方块的代码时就改了挺多,后来发现中文在那些界面上都是乱码,改为swing组件后才正常显示。


16. ClassNotFoundException:使用 Class.forName() 时可能会报出的错

Java错误集锦.assets/1611289398972.png

Java错误集锦.assets/1611289743528.png

Java错误集锦.assets/1611289856086.png

Java错误集锦.assets/1611289782414.png


17. “xxxxx.Exception” clashes with “xxxx.Exception” overriden method does not throw exception.

当子类中覆盖(@override)父类中的某些方法时。一个类若要覆盖父类的方法,那么被覆盖的方法 throws 出来的异常类型只能小于或等于父类中该方法 throws 出的异常类型。

参考链接1:Java中异常的抛出问题

参考链接2:关于Java:为什么覆盖方法不能抛出比覆盖方法更广泛的异常?

解决方案:注意继承时父类和子类存在方法覆盖时的异常抛出问题,注意子类抛出的异常要和父类抛出的异常一样或是其子类。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值