有如下程序:
package classes;public class HelloJava
{
public static void main(String[] args)// throws java.io.IOException
{
System.out.println("test");
}
}我如果用jcreator编译的话,会在当前目录下产生一个classes文件夹,并在其中生成类文件。但是,当我用控制台的命令javac HelloJava.java编译它时,却是在当前目录产生类文件,根本没有classes文件夹产生,而且也无法运行生成的类文件,总是报NoClassDefFoundError异常,请张老师帮我解释一下原因可以么?谢谢!

解决方案 »

  1.   

    package classes这是你自己写的包,当然要把类文件放到包里,jcreator会自动帮你建立这个文件夹,你自己打命令怎么可能
      

  2.   

    javac -. HelloJava.java试试!
      

  3.   

    这个需要你自己创建那个包的文件结构的
    javac就是这么弱
    执行的时候要用java classes.HelloJava
      

  4.   

    JCreator这个IDE会自动帮你创建一个文件夹,
    javac命令则没有那么复杂,需要你自己手动创建并把源文件放到里面
    如没放进文件夹里,路径就不队了,怎么会编译成功呢?
      

  5.   

    可是我的clsases文件如果提前建好了,javac也不会把类放在里面呀
    另外,java -. HelloJava.java不起作用,java classes.HelloJava报NoClassDefFoundError异常,进入classes文件夹执行java HelloJava也是报NoClassDefFoundError异常帮帮小弟吧!
      

  6.   

    如果要在命令行方式下编译你的java文件还要生成文件本身的包信息则需要
    java -d ./ 文件名.java
    -d是一个命令开关,用来告诉编译器生成包的层次结构,./是告诉编译器生成的结果放在当前目录下.
    具体情况,请楼主在命令行里只输入java看看命令功能
      

  7.   

    现在我发现原来我的控制台只能编译,根本执行不了任何java类文件,每次执行都会提示“Exception in thread "main" java.lang.NoClassDefFoundError: aaa”
    而我安装的jcreator却可以运行自如!我哪里设置错了么?请高手执教!
      

  8.   

    在当前HelloJava.java文件的目录下:
    编译:javac -d . HelloJava.java
    运行: java classes.HelloJava
      

  9.   

    javac -d . HelloJava.java ==》这句话不是代表当前目录么
    javac HelloJava.java  ====》这句话和上面那句有什么区别呀,为什么这句就在当前目录产生类文件,而上面那句就在classes文件夹中产生呢?
      

  10.   

    看下Java 编程思想或者Java核心技术或者其它参考书中关于Java 包机制的介绍就可以了