0

我是 Java 新手,我不确定我的问题标题是否恰当。请建议任何更好的标题。

我有一个 Java API,它有许多可执行模块,这些模块执行与解析 MS Outlook.pst文件相关的各种事情。我的问题是,当我运行execute命令来执行.classAPI( java -classpath /opt/Java/libs/JPST/lib/jpst.jar /opt/Java/libs/JPST/examples/GetInboxMessages/bin/Example) 的一个模块的文件时,我遇到了这个异常-

Exception in thread "main" java.lang.NoClassDefFoundError: /opt/Java/libs/JPST/examples/GetInboxMessages/bin/Example
Caused by: java.lang.ClassNotFoundException: .opt.Java.libs.JPST.examples.GetInboxMessages.bin.Example

        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: /opt/Java/libs/JPST/examples/GetInboxMessages/bin/Example.  Program will exit.

到目前为止......
您可以检查我之前的问题,我认为我正确运行了compileandexecute命令。但我仍然得到上述'异常。

我询问了 API 的开发人员,他说我应该获得 Eclipse 或 Netbeans IDE。他说,

examplesAPI 文件夹结构中的文件夹是整个 Eclipse 工作区。

并且还说

编译和运行所有示例更容易。

现在......
所以,我已经为 Java 设置了 Eclipse Helios。谁能告诉我如何使用 IDE 轻松编译和运行所有示例(我认为是示例文件夹中的模块)。我之前曾为 PHP 使用过 Eclipse,但从未使用过 Java。

API 的文件夹结构
我需要执行.class其中一个模块的文件(许多模块文件夹都存在于示例中directory)。API 的示例文件夹中有许多这样的模块。这些模块文件夹中的每一个都包含一个bin文件夹(包含.class文件)和src文件夹(包含.java文件)。我需要执行一个这样的.class文件。

有一个lib包含.jar文件的目录(我的目标文件需要引用它.class)。该lib目录与目录处于同一级别examples

解决方案
我已经验证了 Jonathan 给出的解决方案有效(仅在没有使用省略的情况下验证)。为了更清楚,classpath需要在编译和执行命令中包含所有类位置。因此,如果您需要编译和执行Example.java具有依赖关系的文件,Parent.jar请执行以下操作:-

编译

javac -classpath /path/to/Parent.jar/file/Parent.jar:/path/to/Example.java/file/ Example.java

执行

java -classpath /path/to/Parent.jar/file/Parent.jar:/path/to/Example.class/file Example

并注意分隔符 - 应该:适用于 linux 和;windows。

谢谢,
桑迪潘

4

2 回答 2

1

当 Eclipse 启动时,它应该询问您要使用哪个工作区。选择示例文件夹,如果它确实是一个 Eclipse 工作区,您应该会看到所有已设置的项目(构建所有项目可能需要一些时间,具体取决于项目的大小和机器的速度)。然后只需找到您想要的课程并运行它。如果一切设置正确,它应该可以正常工作。如果没有,您可能必须返回开发人员了解更多详细信息。

但我认为您不需要 Eclipse 来运行该类。查看您在问题开头提供的堆栈跟踪,它似乎无法运行,因为您没有正确设置类路径。尝试:

java -classpath /opt/Java/libs/JPST/lib/jpst.jar:/opt/Java/libs/JPST/examples/GetInboxMessages/bin Example

简单解释一下:类路径列出了 Java 查找所需类的位置。您指定要相对于类路径运行的类,而不是文件路径。由于您尝试在文件夹“/opt/Java/libs/JPST/examples/GetInboxMessages/bin”中运行该类,因此该文件夹必须位于类路径中(注意,如果您使用的是基于 unix 的系统,我假设您使用windows使用';'来分隔条目而不是':')。然后简单地指定相对于类路径(在这种情况下只是类名本身)运行的类。

请注意,这是一个非常基本的概述,如果您开始使用包(出现在 bin 文件夹下方的文件夹),事情会变得更加复杂。这是使用像 Eclipse 这样的程序的一个优势,因为它会为您处理很多这样的事情。

于 2011-01-19T14:19:02.697 回答
0

听起来像一个类路径问题。

  • 在eclipse中右键单击您的项目。

  • 转到 buildPath > 配置构建路径

  • 确保在库选项卡中引用了 jar 文件,如果没有添加它。
于 2011-01-19T13:29:36.050 回答