首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java NoClassDefFoundError

Java NoClassDefFoundError
EN

Stack Overflow用户
提问于 2011-12-08 05:12:50
回答 3查看 582关注 0票数 1

对于学校的一项作业,我需要创建一个实现一些预定义内容的类Blender。我收到了一个JAR文件imagecompositor.jar,它执行所有操作并使用Blender类。JAR文件包含两个类(ImageCompositor.classStDraw.class)。

为了运行这个程序,老师们说我必须运行以下命令:

代码语言:javascript
复制
java -cp ... ass3.ImageCompositor img1 img2 offsetx offsety

我只知道如何编写Java代码。我不知道如何将外部类加载到JAR文件中。所以我试了一下:

代码语言:javascript
复制
java -cp imagecompositor.jar ass3.ImageCompositor img1.png img2.png 0 0

但是它抛出了一个NoClassDefFoundError

代码语言:javascript
复制
Exception in thread "main" java.lang.NoClassDefFoundError: ass3/Blender
at ass3.ImageCompositor.main(ImageCompositor.java:113)

Blender类中有一行package ass3。我做错了什么?

我想提供更多信息,但我不知道如何获取堆栈跟踪等。

EN

回答 3

Stack Overflow用户

发布于 2011-12-08 05:14:36

您需要将Blender类添加到类路径中。

命令行

代码语言:javascript
复制
java -cp imagecompositor.jar ...

使用imagecompositor.jar的类路径。这将告诉Java虚拟机(JVM)查看jar文件。它没有告诉JVM要做的是查找您的类。如果您已经将它们打包到一个jar文件中,您应该这样做

代码语言:javascript
复制
java -cp imagecompositor.jar;myclasses.jar ...

如果.class文件在根目录为path/to/someRoot的树中(例如,类ass3.Blender应该在path/to/someRoot/ass3/Blender.class中),那么您应该对根目录使用相同的语法,而不是.jar文件(我认为这是正确的,找不到文档):

代码语言:javascript
复制
java -cp imagecompositor.jar;path/to/someRoot ...
票数 0
EN

Stack Overflow用户

发布于 2011-12-08 05:30:27

Blender类位于何处?为了被正确地找到,你的搅拌器类(在包"ass“中)必须位于相对于你当前目录的名为”ass“的目录中。如果是这样(并且您没有从默认类路径中删除当前控制器. ),则不需要修改类路径。

然而,在你的例子中,你需要修改类路径(为了指定提供的jar文件),并且在你的post 中列出的命令 .从路径中删除。因此,您必须执行以下操作:

代码语言:javascript
复制
    java -cp whatever.jar;. whatever_other_parameters

(请注意“;”。附加到-CP参数。)这会将当前目录放回类路径中。

票数 0
EN

Stack Overflow用户

发布于 2011-12-08 07:47:11

在静态构造函数中,java.lang.NoClassDefFoundError通常是失败的。如果根本找不到您的类,那么JVM会说java.lang.ClassNotFoundException。从你的问题描述来看,我认为命令行是:

代码语言:javascript
复制
java -cp imagecompositor.jar ass3.ImageCompositor img1 img2 offsetx offsety

假设imagecompositor.jar文件与我们执行java命令的目录相同。这告诉java编译器让类加载器可以使用imagecompositor.jar中的所有内容,我们正在加载一个名为ImageCompositor的类,它位于ass3包中。我们还假设ImageCompositor有一个静态的main方法,这就是Java从命令行运行东西的方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8422633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档