我在D:\TEST目录下创建一个helloworld.java
在DOS下编译:javac d:\TEST\helloworld.java
在运行时用:java d:\TEST\helloworld 为什么不可以呢?

解决方案 »

  1.   

    java -classpath d:\TEST; helloworld
      

  2.   

    楼主可以查看下javac命令提示,进入cmd直接javac然后回车就行了
      

  3.   

    一般,JVM会自动查找路径,你在系统的PATH中添加好JAVA路径,然后直接用:
    javac helloworld.java
    java helloworld 
    就可以了
      

  4.   

    我在D:\TEST目录下创建一个helloworld.java 
    在DOS下编译:javac d:\TEST\helloworld.java 
    编译生成helloworld.class;
    在运行时用:java d:\TEST\helloworld 为什么不可以呢?
      

  5.   

    java -classpath d:\TEST; helloworld
      

  6.   

    在JAVA中的路径表示不同而已,不建议指定路径来执行,还是设置环境变量要规范些.
      

  7.   

    有时候不能java *.class ,命令 java *才可以运行。
      

  8.   

    看看这个吧,你就知道为什么这么设定了,是为了程序更好的兼容性...这是因为java只会在classpath中找有关java的东西,不会理会path,只有这样才能跨平台...你如果非想那样运行class,那就根据classpath,把它当作包来运行好了。classpath有点类似path,但不完全是。
    一般我们在一个类中声明包名:如
    package mypackage.first;
    import java.io.*;
    public class myfirst { ....}那么就是把myfirst这个类放进mypackage里的first里面。大家可以把mypackage和first当作目录,但是你不能在mypackage\first里执行java myfirst 。因为这样java会认为你是在找默认目录(即classpath)里找myfirst类,而不是mypackage.first里面的myfirst类。什么意思呢?
    这是因为java只会在classpath中找有关java的东西,不会理会path。只有这样才能跨平台。
    classpath中加个.(点)表示当前目录,即在当前目录寻找java的类,不理会其他目录。
    (注意:java本身的类,如java.io.*;java awt.*;等等会自动包括进去,不用指定)大家也许认为这很麻烦,但这非常有用,如果你要管理你的文件时。比如说我有10个EJB的client,分别对应不同的EJB,那么你可以把这10个client分别放入各自的EJB包中,以免混乱。如:
    myejb.helloworld.client;
    myejb.firstEJB.client; 等等。举个例子:
    classpath=C:\Project;D:\;
    你在C:\Project里有first,helloworld目录,里面相应有各自的client文件(已编译)。
    给出first目录的client.java作例:
    package first;
    import java.io.*;
    public class client
    {
    public static void main(String args[])
    {
    System.out.println("first.client invoked!!");
    }
    }
    编译:在 C:\Project\first> javac *.java
    那么你就可以在任何DOS目录执行java first.client ,这都会启动这个client,而不会启动helloworld里的,或其他的。如果你在classpath中加了.(点), 如classpath=.;D:\;
    那么你必须要在C:\Project>里面执行上述语句,因为这表示在D:\和当前目录寻找,否则java会报错 ClassNoFoundException 。这点要注意。