解决Eclipse中“诡异”的错误:找不到或无法加载主类
记录下来遇到的(问题,解决方法),是更有效的解决问题的方式。(原谅我领悟的太晚与懒,从此用更有意义的方法,做一个更有意义的人)
因为遇到了多次,参考同一个方法,原文连接:https://blog.csdn.net/u010512607/article/details/46350813
近两天在用Eclipse写代码的时候突发奇想,把所有生成的 .class 文件统统删掉,以为只要重新运行就可以重新生成新的 class 文件,哪知道出问题了,控制台提示->错误:找不到或无法加载主类……。自己忙活了好久,也没有有效的解决方法。后来在网上找了找,终于发现了真正的原因。
原来,Eclipse 中的 Java 编译器是基于 .java 文件的新旧来判断是否进行编译。也就是说,一个 .java 文件如果不更新,那么 Eclipse 中的编译器就不会对其进行再次编译。
前面提到的删掉了所有的 .class 文件后点击运行报错主要也是这个原因。删除 .class 文件后,在 .java 文件没有变化的时候是不会被重新编译的,那么 JVM 在运行 .class 文件时就找不到 .class 文件,于是就报错。那么,该怎么解决呢?
我们知道,Eclipse 默认情况下第一次点击运行图标或者右键->Run As 一个源文件时,会提示如下:
也就是让我们选择是否在运行前自动保存源文件,这样在对源文件进行修改过后就可以立即反映到运行结果中。如果勾上Always save resources before launching,那么每次运行都会判断文件是否已经更新并进行保存,如果要对其进行设置,可以在 Window->Preferences->Run/Debug->Launching 中进行设置:
而在 Eclipse 中还有一点得注意,如果勾选了在运行前保存源文件,那么,源文件也会被编译,因为在默认的 Windows->Preferences->General->Workspace 中,有这样一条:
只要源文件一有变化(保存后)就会自动进行编译操作,缺点是必须得做点什么然后保存,所以如果源文件中没有使用到其它 .java 文件中自定义的类的时候,可以对其进行象征性的修改以使其变成新的,然后运行就行了。否则还得把用到的类也进行同样的操作然后保存运行。
注意,还有但是,这样做太麻烦了,而且对于一包含大量源文件的工程来说,这么做也不太现实。所以得找一个一劳永逸的解决之道。答案就是:
Project->Clean...
Clean...操作会将该工程以前的所有编译信息清空,然后默认将所在工程的所有 .java 文件都进行一次编译,这样的话就可以方便地进行修改与运行了。
写了这么多,总结一下关于删掉 .class 文件运行报错的几种解决办法:
1、对于单个文件,并且没有使用到在别的 .java 文件中自定义的类,可以对其进行象征性的修改,加空格或者类似的操作,然后保存。如果使用了其它类,那么就得在对应的类中也作修改并保存,或者修改完后一齐保存。
2、简单粗暴又有效的办法,Project->Clean...,将所在工程以往的编译信息都清空并全都重新编译一次。