【问题标题】:error in java basic test programjava基本测试程序中的错误
【发布时间】:2013-04-11 00:43:58
【问题描述】:
$cat JarTest.java 

package edu.testjava.simple;

public class JarTest
{
    public static void main(String args[])
    {
        System.out.println("Hello World\n");
    }
}


$javac JarTest.java

$java JarTest

我得到错误:

Exception in thread "main" java.lang.NoClassDefFoundError: JarTest (wrong name: edu/testjava/simple/JarTest)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    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: JarTest.  Program will exit.

为什么会这样?

包裹等有什么问题吗?

谢谢!

【问题讨论】:

  • 您所做的完全是直观的,而且这不仅能正常工作,这很烦人。要在下面扩展 Matt 的答案,您需要指定类路径包含当前目录。我认为这是因为 java 正在目录 ./edu/testjava/simple 中查找您的文件。

标签: java


【解决方案1】:

你需要做的:

$ java -cp . edu.testjava.simple.JarTest

您需要使用完整的包名指定类的名称(在本例中为 edu.testjava.simple)。最后你不需要 .class 或 .java。

您还可以查看How to execute a java .class from the command line的答案。

【讨论】:

  • javac -d 。 edu/testjava/simple/JarTest.java,带有适合您系统的 / 或 \
【解决方案2】:

是的,这是因为包裹。 Java 强制项目结构与包结构相同。也就是说,edu.testjava.simple 包中的类必须位于edu/testjava/simple/ 目录中。

您可以:

  • 删除包声明(不过,这仅在“hello world”情况下可接受)
  • 使用javac -d . JarTest.java 编译文件(这会将.class 文件放在适当的目录中)并通过java edu.testjava.simple.JarTest 启动它

【讨论】:

  • 是的,这就是我说“要么”的原因。如果您选择第一个选项,则可以按照作者建议的方式编译和执行源文件。
  • 在使用 -d 编译后,将创建适当的匹配目录,我可以通过手动进入该目录然后只说 java JarTest 来启动它吗?
  • @p2pnode 不,你不能,你需要在顶级;但您可以按照 Matthew Farwell 的建议使用 java -cp . edu.testjava.simple.JarTest
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2023-04-09
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多