【问题标题】:Again "wrong name" error when executing java program执行java程序时再次出现“错误名称”错误
【发布时间】:2011-02-10 08:54:40
【问题描述】:

参考这篇文章 Receiving "wrong name" NoClassDefFoundError when executing a Java program from the command-line

我不明白如何解决问题

实际上在我的 java 源代码中有一行:

包es_2011;

当我通过 JCreator 编译程序时,一切正常。 它会创建一个名为 es_2011 的文件夹,用于放置 .class 文件。 执行操作也很顺利,程序运行正常。

现在我只想使用命令行。 所以我将我的 java 文件放在 javac.exe 所在的目录中,但每当我尝试编译时,我都会得到同样的错误

我使用的命令是:javac ProgAudioJ.java

路径(javac.exe 所在的位置)是:C:\Program files\Java\jdk1.6.0_22\bin

是否有人愿意帮助我理解确切地告诉我我必须做什么? 非常感谢...MAX

【问题讨论】:

    标签: java


    【解决方案1】:

    用于外观的设置(在 windows 下)

    C:\classDir -> 是项目 C:\classDir\testpackage -> 是唯一使用的包(包“testpackage”) C:\classDir\testpackage\Main.class -> 是里面有main方法的类(重要:它是.class而不是.java)

    Main.class 如下所示:

    package testpackage;
    
    public class Main {
    
        public static void main(String[] args) {
            System.out.println("Program started! ;-)");
        }
    
    }
    

    使用命令提示符执行以下操作:

    c:\classDir> java testpackage.Main
    

    结果:

    Program started! ;-)
    

    根据您在 IDE 中启动但不是从控制台启动的问题: - 检查您是否真的使用 .class 文件的路径? - 使用控制台转到 .class 文件的目录,而不是项目(例如,在 Eclipse 中,它是 bin 目录 - 输入完整的类名(包括以 . 分隔的包) -> 例如 testpackage.Main

    更多信息可以在以下位置找到: http://www.oracle.com/technetwork/java/compile-136656.html

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      MAX,如果该类定义它在包 es_2011 中,那么它应该在同名文件夹中。

      因此,在您的情况下,将 ProgAudioJ.java 放在文件夹 es_2011 中,然后运行 javac es_2011\ProgAudioJ.java

      稍后运行它,你需要命令

      java es_2011.ProgAudioJ
      

      【讨论】:

        【解决方案3】:

        您应该在 path 中添加 javac.exe。编辑您的路径变量并将路径附加到 jdk 的 bin

        然后将java文件放在一个名为es_2011的目录中,因为包声明是es_2011然后编译

        c:\es_2011\javac YourJava.java
        

        现在回到 C:

        c:\java es_2001.Yourjava
        

        【讨论】:

          【解决方案4】:

          看完你的其他帖子:“Receiving "wrong name" NoClassDefFoundError when executing a Java program from the command-line”我猜你去你的ProgAudioJ.class文件所在的目录es_2011并运行

          java ProgAudioJ
          

          来自那个文件夹。

          您必须转到上面的文件夹 (cd ..) 并运行

          java es_2011.ProgAudioJ
          

          【讨论】:

            【解决方案5】:

            Java 中的每个包都对应于文件系统上的一个文件夹。所以像com.stackoverflow 这样的包声明意味着源类需要在文件夹./com/stackoverflow 中。通常,整个项目会有一个单独的 src 文件夹,其中包含 com/stackoverflow

            当您编译 Java 类时,您不需要将源文件放在与 javac.exe 相同的目录中,但是您需要确保 javac.exe 在您的操作系统 PATH 变量中。这告诉操作系统在运行命令时它应该在哪里查找可执行文件,在 *nix 机器上这通常是 /usr/bin 或只是 /bin 但在 Windows 机器上,可执行文件通常位于应用程序自己的目录中,即是C:\Program Files\something。假设您已经正确安装了 JDK,javac.exe 应该已经在 PATH 中,您可以通过打开命令行并运行 javac 来检查这一点(就像那样)。如果你得到一些输出,那么一切都很好,系统知道在哪里可以找到javac.exe

            接下来,您需要转到您的项目文件夹并输入从项目文件夹运行的javac -d . src/com/stackoverflow/MainSO.java notice。这将在您的项目根目录中创建一个名为com 的文件夹,并将已编译的类放在com/stackoverflow 中。 -d 标志告诉javac 将已编译的类放在哪里,如果您忽略它,则已编译的类将位于源代码所在的位置。

            然后当你想运行类时你输入java com.stackoverflow.MainSO(没有.class)。至关重要的是,此命令需要在包含类层次结构的根目录(即包含已编译类的 com 文件夹)中运行。您可以通过为带有-cp 标志的java 命令提供类路径,为java 指定其他位置以查找类。默认情况下,类路径将包含运行 java 命令的目录。例如,如果您的项目具有依赖项外部 .jar 文件,您将需要在类路径中提供它们中的每一个(及其完整的文件路径)(这就是对于编译器也是如此)。 IDE 会自动为您执行此操作。

            希望对您有所帮助。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-04-01
              • 2011-06-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多