使用PostgreSQL JDBC驱动运行编译类时出现‘找不到或无法加载主类’错误
解决Java运行时找不到主类Main的问题
问题场景
项目目录包含Main.java、编译生成的Main.class和postgresql-42.7.5.jar,使用javac -cp .:postgresql-42.7.5.jar Main.java编译成功,但执行java -cp .:postgresql-42.7.5.jar Main时出现错误:
Error: Could not find or load main class Main Caused by: java.lang.ClassNotFoundException: Main
核心原因及解决办法
1. 操作系统类路径分隔符不匹配
这是最常见的触发原因:
- Linux/macOS:类路径用冒号
:分隔,可尝试调整类路径顺序再执行:java -cp postgresql-42.7.5.jar:. Main - Windows:类路径必须用分号
;分隔,冒号:会被系统识别为路径的一部分,导致无法找到当前目录下的Main.class,正确命令应为:java -cp .;postgresql-42.7.5.jar Main
2. 确认Main.class的位置和权限
- 用命令验证当前目录下存在
Main.class:- Linux/macOS:
ls -l Main.class - Windows:
dir Main.class
- Linux/macOS:
- 如果文件存在但仍报错,Linux/macOS下可执行
chmod +r Main.class赋予读取权限
3. 检查Java版本兼容性
确保编译和运行使用的Java版本一致:
- 查看编译版本:
javac -version - 查看运行版本:
java -version
若编译版本高于运行版本,会导致类无法加载,需统一Java环境版本
4. 验证主方法签名
确认Main类中的main方法签名完全符合规范:
public static void main(String[] args)
你的代码中签名是正确的,但如果存在拼写错误(比如String小写、参数名错误等),也会导致JVM无法识别主类
内容的提问来源于stack exchange,提问作者Drax
相关产品推荐
相关产品推荐

