从Python运行Java程序

时间:2010-01-22 22:15:22

标签: java command-line classnotfound

我看过herehereherehere

虽然提供信息,但他们还没有足够让我发现问题的根源。我的代码不包含在JAR文件中,并且客户已请求我们不发送它。

我在Eclipse中构建了应用程序,并从那里运行良好。我已经设置了一个脚本,它将修改其中一个java文件的main方法以进行测试。我想在修改后使用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();

如果能帮到你,我会很高兴地列出更多信息。 (不,我不是体育经纪人。)至少从命令行开始,我需要做些什么呢?

提前致谢。

3 个答案:

答案 0 :(得分:4)

  1. 不鼓励在默认包中使用类(即没有包)
  2. 您必须从项目的根目录中调用java -cp . - 即.class文件所在的目录,或者您创建包时的目录,com({ {1}}等子目录驻留。
  3. 您必须使用完整的合格名称来引用该课程 - 即org
  4. 你最好使用IDE--出于教育目的,有BlueJ和JCreator。 Eclipse和NetBeans更强大,更复杂。

答案 1 :(得分:3)

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

Eclipse将自动编译它(内置构建器)但当然,在IDE之外,您必须先调用javac才能执行该类。 java无法处理源文件。

修改

我不知道你在java中的实际经验 - 但这就是它在命令行中的常用方法。

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

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

然后您cd转到/dev/bin并执行java com.example.Hello。请注意,包名称(com.example)始终映射到文件夹结构(com/example)。如果您执行上述命令并且java在Hello.class文件夹中找不到./com/example,那么它将抛出NoClassDefFoundError

答案 2 :(得分:3)

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