NoClassDefFoundError并且无法找到或加载主类

时间:2012-02-02 20:42:23

标签: java

我正在使用罗马教程页面http://wiki.java.net/twiki/bin/view/Javawsxml/Rome05TutorialFeedReader中的代码。也尝试这个:http://wiki.java.net/twiki/bin/view/Javawsxml/Rome05TutorialFeedReader

编译工作,但我不知道如何运行这些示例。为什么我只是在命令行中键入java FeedReaderjava FeedAggregator,我收到错误:

C:\projects\freshmeat\src>java FeedAggregator http://freecode.com/?format=atom
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/syndication/f
eed/synd/SyndFeed

加上此错误后面的大块

为什么会发生这种情况,我该如何修复并尝试这些?我如何与罗马合作??

2 个答案:

答案 0 :(得分:0)

您需要在运行时类路径中包含rome(除了编译时类路径)

java -classpath lib/rome.jar FeedAggregator ...

答案 1 :(得分:0)

您尝试运行的示例位于包com.sun.syndication.samples中。你说你是一个完全的初学者,所以,为了简单起见,我建议你删除packageFeedReader.javaFeedAggregator.java开头的package行。在删除FeedReader.class指令后重新编译类。

然后,要运行这些类,请确保您与FeedAggregator.class创建的类文件javacFeedAggregator位于同一目录中。然后,尝试运行:

java -cp c:\projects\freshmeat\libs\rome-1.0.jar;c:\projects\freshmeat\libs\jdom-1.0.jar;. FeedReader

(同样适用于.。)

另请注意,我已将当前目录-cp添加到FeedReader属性中。如果没有这个,Java虚拟机将无法知道它必须在当前目录中查找您的FeedAggregatorpackage类。

如果您要恢复FeedReader.class指令,那么当您编译其源时,您会发现类文件FeedAggregator.classcom\sun\syndication\samples将在目录com内创建。要从此位置运行类文件,您需要使用命令行,例如

java -cp c:\projects\freshmeat\libs\rome-1.0.jar;c:\projects\freshmeat\libs\jdom-1.0.jar;. com.sun.syndication.samples.FeedReader

然后从包含{{1}}子目录的目录运行它,而不是包含类文件的目录。

可以找到有关Java中包的更多信息here