(JAVA)找不到或无法加载主类 com.sun.tools.javac.main

本文解决了在安装JDK并配置环境后,在CMD中运行javac遇到的错误:“找不到或无法加载主类com.sun.tools.javac.main”。通过将JDK和JRE分开安装,避免了覆盖冲突,使JDK正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

安装JDK并配好环境后,在CMD下运行javac报错“找不到或无法加载主类com.sun.tools.javac.main”

解决:

重新安装,将JDK和JRE放在不同的文件夹下即可.即在安装JDK后不要在相同的文件夹下再安装JRE。

思考:

在同一个文件夹下同时安装jre和jdk会导致覆盖冲突,使得无法正常的调用jdk的bin目录下的javac.exe 
百度的结果大都是说环境配置的问题,但是我反复检查之后并未发现问题,并且在CMD下Java  -version 也是正常的。

总结:

技术问题还是用Google!
出现这个问题我们进一步会思考Java的JDK和JRE到底有什么区别。

JRE: Java Runtime Environment 顾名思义是java运行时环境,包含了java虚拟机、java基础类库等。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。它不包含开发工具(编译器、调试器等)。
JDK:Java Development Kit 顾名思义是java开发工具包.它给开发人员提供了Java的开发环境(用于将java文件编译为class文件的编译器javac等)和运行环境(用于解析class文件使其得到运行的JVM等)。所以不仅拥有了运行Java程序的平台,也可以来开发Java程序。JDK是整个Java的核心,它包括了Java运行环境(JRE),一堆Java工具tools.jar和Java标准类库 (rt.jar)。
简而言之,如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,则还需要安装JDK。
进一步发现JDK再已经包含了JRE的情况下为什么还要再装JRE呢。
原来JDK的里面的exe程序其实大部分都是用Java写的,所以在执行这些Java程序时,它需要自行依附自身所带的一套JRE才行。程序员在开发时会优先寻找“ java 、 javac ”这些命令本身的目录或者他们的父目录的 JRE,即JDK下的JRE。而用户只需执行Java程序时会使用后安装的JRE。

ps:今天是我的生日,第一次写博客,虽然之前自己从来没有在网上写过日志文章之类的,但是希望以后可以通过写技术博客的方式提升自己,共同努力和进步!

java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space at com.sun.tools.javac.main.Main.compile(Main.java:559) at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129) at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138) at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:239) at org.jetbrains.jps.javac.ExternalJavacProcess.compile(ExternalJavacProcess.java:189) at org.jetbrains.jps.javac.ExternalJavacProcess.access$400(ExternalJavacProcess.java:28) at org.jetbrains.jps.javac.ExternalJavacProcess$CompilationRequestsHandler$1.run(ExternalJavacProcess.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.OutOfMemoryError: Java heap space at java.io.BufferedInputStream.<init>(BufferedInputStream.java:203) at java.io.BufferedInputStream.<init>(BufferedInputStream.java:183) at org.jetbrains.jps.javac.ZipFileObject.openInputStream(ZipFileObject.java:48) at com.sun.tools.javac.api.ClientCodeWrapper$WrappedFileObject.openInputStream(ClientCodeWrapper.java:426) at com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:2510) at com.sun.tools.javac.jvm.ClassReader.complete(ClassReader.java:2442) at com.sun.tools.javac.jvm.ClassReader.access$000(ClassReader.java:76) at com.sun.tools.javac.jvm.ClassReader$1.complete(ClassReader.java:240) at com.sun.tools.javac.code.Symbol.complete(Symbol.java:574) at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1037) at com.sun.tools.javac.code.Symbol$ClassSymbol.members(Symbol.java:978) at com.sun.tools.javac.jvm.ClassReader$AnnotationDeproxy.visitEnumAttributeProxy(ClassReader.java:1854) at com.sun.tools.javac.jvm.ClassReader$EnumAttributeProxy.accept(ClassReader.java:1676) at com.sun.tools.javac.jvm.ClassReader$AnnotationDeproxy.deproxy(ClassReader.java:1814) at com.sun.tools.javac.jvm.ClassReader$AnnotationDefaultCompleter.run(ClassReader.java:1918) at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:143) at com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:129) at com.sun.tools.javac.comp.Enter.complete(Enter.java:512) at com.sun.tools.javac.comp.Enter.main(Enter.java:471) at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:982) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.enterTrees(JavacProcessingEnvironment.java:1015) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.<init>(JavacProcessingEnvironment.java:902) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.next(JavacProcessingEnvironment.java:921) at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1187) at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170) at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856) at com.sun.tools.javac.main.Main.compile(Main.java:523) at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129) at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138) at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:239) at org.jetbrains.jps.javac.ExternalJavacProcess.compile(ExternalJavacProcess.java:189) at org.jetbrains.jps.javac.ExternalJavacProcess.access$400(ExternalJavacProcess.java:28)
最新发布
05-20
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值