回答(18)
2 years ago
你的类路径被破坏了(这是Java世界中一个非常普遍的问题) .
根据您启动应用程序的方式,您需要将参数修改为 -cp ,MANIFEST.MF中的Class-Path条目或磁盘布局 .
2 years ago
类路径是从中加载类的位置列表 .
这些“位置”可以是目录,也可以是jar文件 .
对于目录,JVM将遵循用于加载类的预期模式 . 如果我的类路径中有目录 C:/myproject/classes ,并且我尝试加载类 com.mycompany.Foo ,它将在classes目录下查找名为 com 的目录,然后在该目录下调用 mycompany ,最后它将查找名为 Foo.class 的文件在那个目录中 .
在第二个实例中,对于jar文件,它将在jar文件中搜索该类 . jar文件实际上只是一个压缩的目录集合,如上所述 . 如果你解压缩一个jar文件,你会得到一堆遵循上述模式的目录和类文件 .
因此,JVM在尝试加载类定义时,从头到尾遍历类路径,查找类的定义 . 例如,在类路径中:
C:/ myproject的/类; C:/myproject/lib/stuff.jar; C:/myproject/lib/otherstuff.jar
JVM将首先尝试查看目录 classes ,然后查看 stuff.jar ,最后查看 otherstuff.jar .
当您获得ClassNotFoundException时,这意味着JVM已遍历整个类路径,但未找到您尝试引用的类 . 像Java世界中经常遇到的解决方案是检查类路径 .
您可以通过说 java -cp 然后再使用类路径在命令行上定义类路径 . 在诸如Eclipse之类的IDE中,您将有一个菜单选项来指定类路径 .
2 years ago
假设我们有一个名为 org.mypackage 的包,其中包含以下类:
HelloWorld(主类)
SupportClass
UtilClass
并且定义此包的文件物理存储在目录 D:\myprogram (在Windows上)或 /home/user/myprogram (在Linux上)下 .
文件结构如下所示:
当我们调用Java时,我们指定要运行的应用程序的名称: org.mypackage.HelloWorld . 但是,我们还必须告诉Java在哪里查找定义包的文件和目录 . 因此,要启动该程序,我们必须使用以下命令:
注意:无论当前位置是什么,都必须执行上面的java命令 . 但这不是javac的情况 . 对于编译,您甚至可以直接进入具有.java文件的目录,并直接执行javac ClassName.java .
2 years ago
如果您知道类的路径或包含该类的jar,则在运行它时将其添加到类路径中 . 您可以使用此处提到的类路径:
在Windows上
java -classpath .;yourjar.jar YourMainClass
在UNIX / Linux上
java -classpath .:yourjar.jar YourMainClass
2 years ago
如果你使用maven,请尝试这些 . 我使用maven作为我的项目,当我执行 mvn clean install 并尝试运行程序时,它会抛出异常 . 所以,我清理项目并再次运行它对我有用 .
我使用eclipse IDE .
对于运行Junit测试时出现Class Not Found异常,请尝试运行 mvn clean test 一次 . 它将编译所有测试类 .
2 years ago
要通过命令行将类的位置添加到类路径,只需在运行时添加 -cp 或 -classpath 以及类的位置 . I.E.
java -cp "c:/location/of/file" YourProgram
或者,如果您正在运行诸如eclipse之类的IDE,您可以右键单击 project -> build path -> configure build path 并将包含您的类的外部JAR添加到构建路径,然后它应该可以正常工作 .
2 years ago
使用 ';'作为分隔符 . 如果您的环境变量设置正确,您应该看到您的设置 . 如果您的PATH和CLASSPATH是正确的,Windows应该识别这些命令 . 安装Java时无需重新启动计算机 .
2 years ago
将 full path 的jar文件添加到CLASSPATH . 在linux中使用: export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH" . 其他工作方式(不编辑CLASSPATH)解压缩当前项目文件夹中的jar .
方法不适合我:
1)使用 -cp 选项和jar的完整路径文件 .
2)当位于当前文件夹中时,仅使用 -cp 与jar名称
3)将jar复制到当前项目文件夹
4)将jar复制到java jar的标准位置(/ usr / share / java)
这个解决方案是针对mysql-connector-java.5 - * .jar中的com.mysql.jdbc.Driver类报告的,使用OpenJDK 1.7版在linux上工作
2 years ago
转到顶部并删除import语句(如果有),然后重新导入该类 . 但如果不是这样的话,那就干净吧 . 您使用的是Netbeans还是Eclipse?
2 years ago
我也遇到了这个并尝试了所有其他解决方案 . 我的HTML文件夹中没有.class文件,我只有.java文件 . 一旦我添加.class文件,程序运行正常 .
2 years ago
如果您的类路径不正确,可能会发生这种情况
让我们在同一个projectname下面建一个可序列化的类和可反序列化的类 . 您运行可序列化类,在特定文件夹中创建可序列化对象 . 现在您需要desearialized数据 . 与此同时,如果您更改项目的名称,它将无法正常工作 . 您必须先运行serializable类,然后反序列化该文件 .
2 years ago
如果你正在使用maven尝试maven更新所有项目并强制快照 . 它也会清理并重建所有类路径..它解决了我的问题..
2 years ago
我已经做了
1.使缓存无效并重新启动
Rebuilt my project 解决了这个问题
2 years ago
我试图使用 Process 类从C#代码运行.jar . java代码从eclipse成功运行,但它不是来自C#visual studio,甚至直接点击jar文件,它始终以 ClassNotFoundException: 异常停止 . 我的解决方案是将java程序导出为"Runnable JAR file"而不是"JAR File" . 希望它可以帮助某人 .
2 years ago
在Java更新之后,可能会在Windows上发生这种情况,其中缺少旧版本的Java SDK并且存在新版本 . 我会检查你的IDE是否使用已安装的java SDK版本(IntelliJ:CTRL SHIFT ALT S)
2 years ago
如果您添加了多个 **(Third-Party)**libraries and Extends Application 类
然后它可能会发生 .
为此,您必须设置 multiDexEnabled true 并用 MultiDexApplication 替换扩展 Application 类 .
它将被解决 .
2 years ago
基本通用问题 - 最简单的通用答案;)
根据这些信息,我将假设你可能正在尝试一种基本的编码方法,构建/编译和运行一个简单的控制台应用程序,如“Hello World”,使用一些简单的文本编辑器和一些Command Shell .
在以下情况中会发生此错误:
..\SomePath>javac HelloWorld.java
..\SomePath>java HelloWorld.class
换句话说,使用:
..\SomePath>java HelloWorld
附:添加文件扩展名.class会产生同样的错误 . 还要确保在操作系统的环境变量的PATH中有Java(JDK / JRE)bin文件夹 . (查看其他帖子的详细信息)P.P.S我的假设是正确的吗?
2 years ago
将所有代码放在try块中,然后在catch块中捕获异常
try
{
// code
}
catch(ClassNotFoundException e1)
{
e1.getmessage();
}