4

我看过这里这里这里这里

虽然信息量很大,但它们还不足以让我发现问题的根源。我的代码不包含在 JAR 文件中,并且客户要求我们不要这样运送它。

我在 Eclipse 中构建了应用程序,并从那里运行良好。我已经设置了一个脚本,该脚本将修改main其中一个 java 文件的方法以进行测试。我想在修改后使用来自 Python 的调用来运行应用程序。但是,当我尝试使用命令行调用程序时,javajava -cp .出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: DemoAPIFunctionality
Caused by: java.lang.ClassNotFoundException: DemoAPIFunctionality
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: DemoAPIFunctionality.  Program will exit.

我的项目依赖于几个不在根目录中的 JAR,以及一个不在根目录中的 DLL 文件。我希望它与其中一个的位置有关,但我不确定并且进展甚微。这里是DemoAPIFunctionality.java

public class DemoAPIFunctionality
{
  public final static void main(String[] args)
  {
    DemoAPIFunctionality demo = new DemoAPIFunctionality();

如果它可以帮助您帮助我,我很乐意列出更多信息。(不,我不是体育经纪人。)我需要做些什么才能让它至少从命令行工作?

提前致谢。

4

3 回答 3

4
  1. 不鼓励在默认包中包含类(即没有包)
  2. 您必须java -cp .从项目的根目录调用 - 即.class文件所在的目录,或者当您创建包时,comorg等)子目录所在的目录。
  3. 您必须通过它的全限定名来引用该类 - 即com.package.ClassName
  4. 您最好使用 IDE - 出于教育目的,有 BlueJ 和 JCreator。Eclipse 和 NetBeans 更加强大和复杂。
于 2010-01-22T22:20:52.383 回答
3

您没有提到您的 python 脚本在应用编辑后实际上编译了 java 源文件。

Eclipse 将自动编译它(内置构建器),但当然,在javac执行该类之前您必须调用 IDE 之外。java不适用于源文件。

编辑

我不知道你在 java 方面的实际经验——但这就是它通常在命令行上的工作方式。

com.example.Hello假设,您有一个带有 main 方法和文件结构的 java 类

/dev/bin/com/example/Hello.class

然后你去做cd一个。请注意,包名称 ( ) 始终映射到文件夹结构 ( )。如果您执行上述命令并且 java在文件夹中找不到,那么它将抛出./dev/binjava com.example.Hellocom.examplecom/exampleHello.class./com/exampleNoClassDefFoundError

于 2010-01-22T22:46:38.977 回答
3

简单的解决方法、提示和快捷方式。java classname从 python 中调用时不要使用任何路径。例如。commands.getstatusoutput("java -cp $CLASSPATH clusterize")

于 2011-02-16T11:17:18.653 回答