今天碰到了一个很变态的问题,写了一个很简单的HelloWord.java,内容如下:
package com.yanjiuyanjiu;
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
在eclipse中运行是可以的,但是在命令行下运行总是失败。我的工程位置为 d:/workspace/HelloWorld/。
尝试了很多次,如下
d:/workspace/HelloWorld/bin/com/yanjiuyanjiu/>java HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: com/yanjiuyanjiu/HelloWorld)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
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)
Could not find the main class: HelloWorld. Program will exit.
Exception in thread "main"
d:/workspace/HelloWorld/bin/com/yanjiuyanjiu/>java -classpath .; HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: com/yanjiuyanjiu/HelloWorld)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
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)
Could not find the main class: HelloWorld. Program will exit.
Exception in thread "main"
d:/workspace/HelloWorld/bin/com/yanjiuyanjiu/>cd..
d:/workspace/HelloWorld/bin/com/>cd..
d:/workspace/HelloWorld/bin/>java
-classpath .; com/yanjiuyanjiu/HelloWorld
只有这个成功
Hello
World!
d:/workspace/HelloWorld/bin/>java
-classpath .; com/yanjiuyanjiu/HelloWorld
换了个斜杠就不行了
Exception
in thread "main" java.lang.NoClassDefFoundError: com/yanjiuyanjiu/HelloWorld (wrong name: com/yanjiuyanjiu/HelloWorld)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
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)
Could not find the main class: com/yanjiuyanjiu/HelloWorld. Program will exit.
Exception in thread "main"
d:/workspace/HelloWorld/bin/>java
-classpath ./com/yanjiuyanjiu/; HelloWorld
Exception
in thread "main"java.lang.NoClassDefFoundError: HelloWorld
(wrong name: com/yanjiuyanjiu/HelloWorld)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
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)
Could not find the main class: HelloWorld. Program will exit.
Exception in thread "main"
在网上搜索了大半天,大部分说是环境变量,classpath或JDK版本的问题,还有执行时文件名class后缀不要。我一一试过,都没有解决。最后无意中换了一下命令符的位置,成功了。总结如下:
1. 环境变量,CLASSPATH当然要设置好,执行时不要带class后缀;
2. 路径中的斜杠用“/”而不是“/”;
3. 命令符的当前目录要在包的起点。比如这里应该在 d:/workspace/HelloWorld/bin/>,如果在 d:/workspace/HelloWorld/bin/com/yanjiuyanjiu/>,反而不行,有点“近水楼台不得月”的意思,不知道为什么,还请高手解释一下。
原文地址:http://www.yanjiuyanjiu.com/2011/06/23/javac-mutiple-files/
分享到:
相关推荐
这里我们主要探讨如何使用DOS命令来测试Java JAR文件,以及如何在命令行下运行JUnit测试。这是一项基础但至关重要的技能,因为通过命令行工具可以高效地自动化测试和调试代码。 首先,让我们了解Java JAR文件。JAR...
总结来说,Java命令行辅助工具是一个实用的开发工具,它通过自动化Java源代码的编译和运行,减少了开发者在命令行上的操作,提升了开发效率。对于初学者和频繁进行命令行操作的开发者来说,这样的工具无疑是一个很好...
在没有具体代码的情况下,我们假设它是用来演示如何通过Java命令行设置classpath来运行包含数据库操作的Java程序。 在Windows系统中,类路径可以通过以下两种方式设置: 1. **环境变量设置**: - 打开系统属性,...
### Java命令行运行参数详解 #### 一、概述 Java作为一种广泛使用的编程语言,其运行依赖于Java虚拟机(JVM)。为了优化JVM的性能,开发者可以通过命令行传递一系列参数来控制JVM的行为。本文将详细介绍Java命令行...
Java 命令行参数中最基本的参数是运行 Class 文件。使用 Java 命令行参数可以执行带 main 方法的 Class 文件。基本语法为:java <CLASS 文件名>,其中 CLASS 文件名不带文件后缀。例如,要执行 Test.class 文件,只...
本文将深入探讨如何在命令行环境下编译和运行包含包结构的Java程序。 首先,Java中的包(package)是用来组织类的一种方式,它帮助避免命名冲突并提供更好的代码管理。例如,在给定的例子中,我们有两个类——`A....
在提供的压缩包文件`CommandLineStuManagement`中,可能包含了源代码、编译后的class文件、README文档或其他辅助文件。解压后,你可以查阅源代码来进一步了解其工作原理,或者直接运行程序进行实际操作。如果包含...
当开发者编写完Java代码后,需要将其编译成字节码(.class文件),然后再由JVM解释执行这些字节码。这一编译过程通常可以通过Java Development Kit (JDK)中的`javac`命令完成。 #### Java命令行编译基础 在命令行...
javac Welcome.java (得到Welcome.class文件) java Welcome (省略.class) 程序名 Welcome.java 保存位置 d:\javacode 在控制台输出“Welcom to Java!” 3.执行Java程序 1.用记事本编写Java程序 命令行状态下编写Java...
Java作为一种广泛使用的编程语言,其编写的程序通常会被编译成字节码(.class文件),这些文件可以在任何支持Java虚拟机(JVM)的平台上运行。然而,有时候我们需要查看或理解这些.class文件中的具体逻辑,这就需要...
Java命令行工具是Java开发中的基础部分,它们允许开发者在没有图形用户界面(GUI)的情况下执行各种任务。这篇博文可能探讨了如何利用Java的命令行工具进行程序的编译、运行和其他相关操作。在Java中,命令行工具...
开发者使用它将.java源文件编译成.class字节码文件,以便能够在JVM上运行。 2. java:Java应用程序的启动器。通过它可以启动Java应用程序,包括应用程序的主类和其他依赖。 3. javadoc:API文档生成器。它能从Java...
### Java命令行运行参数详解 #### 一、概述 Java作为一种广泛应用的编程语言,其运行依赖于Java虚拟机(JVM)。为了更好地控制Java应用程序的运行环境,开发者可以通过指定一系列命令行参数来调整JVM的行为。本文将...
`javac` 是Java编译器,用于将Java源代码(.java文件)编译成字节码文件(.class文件),而 `java` 命令则负责加载并运行这些字节码文件。 ##### javac命令详解 - **语法**:`javac [选项] <源文件名>.java` - `...
这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...
通过以上步骤,我们不仅学习了如何在命令行环境下编译Java源代码、创建JAR文件,而且还掌握了如何通过修改`Manifest`文件来让JAR文件能够直接运行。这种方法对于那些需要频繁构建和部署的应用来说非常实用,同时也...
Java命令行运行class文件是Java开发中的基本操作,主要用于测试和执行编译后的Java程序。然而,有时在尝试运行class文件时可能会遇到各种异常情况,这些异常可能是由于多种原因引起的。这里我们将深入探讨可能导致...
然而,在某些情况下,当尝试通过命令行运行这些JAR文件时,可能会遇到空指针异常(NullPointerException, NPE)的问题。本文将详细探讨导致此类问题的原因,并提供解决方案,特别是关于如何正确配置Java环境变量来避免...