大家看看我的classpath:.;C:\Program Files\Java\jdk1.5.0\lib\tools.jar;C:\Program Files\Java\jdk1.5.0\lib\dt.jar;C:\Program Files\Java\jdk1.5.0\bin;我自己建了个包,但是同个包里的类死活就是没办法互相调用。大家帮我看看到底是什么问题吧

解决方案 »

  1.   

    你是说用import 我的类吗?
    还是不行
    package MyPack;class Balance
    {
     String name;
     double bal;
     
     Balance(String n,double b)
     {
      name=n;
      bal=b;
     }
     void show()
     {
      if(bal<0)
       System.out.print("-->");
     System.out.println(name+":$"+bal);  
     }
    }
    class AccountBalance
    {
     public static void main(String args[])
     {
      Balance current[]=new Balance[3];
      
      current[0]=new Balance("K.J.Fielding",123.23);
      current[1]=new Balance("Will Tell",157.02);
      current[2]=new Balance("Tom Jackson",-12.33);
      
      for(int i=0;i<3;i++)  current[i].show();
     }
    }
    package MyPack;public class Balance1
    {
     String name;
     double bal; public Balance1(String n,double b)
     {
      name=n;
      bal=b;
     }
     public void show()
     {
      if(bal<0)
         System.out.print("-->");
      System.out.println(name+": $"+bal);
     }
    }
    import MyPack.*;class TestBalance
    {
     public static void main(String args[])
     {
      Balance1 test=new Balance1("J.J.Jaspers",99.88);  test.show();
     }
    }
    编译TestBalance.java的时候出现---------- javac ----------
    TestBalance.java:1: package MyPack does not exist
    import MyPack.*;
    ^
    TestBalance.java:7: cannot access Balance1
    bad class file: .\Balance1.class
    class file contains wrong class: MyPack.Balance1
    Please remove or make sure it appears in the correct subdirectory of the classpath.
      Balance1 test=new Balance1("J.J.Jaspers",99.88);
      ^
    2 errorsOutput completed (1 sec consumed) - Normal Termination
      

  2.   

    要保证classpath中能找到你的包;
    比如说你的包名为  MyPack,放在 f:\java 目录下,则你的 classpath中要是这样的
     %classpath%;f:\java
      

  3.   

    是你编译后的 .class 放错了位置。ClassLoader 从你的 ClassPath 中的  class 文件夹或者 jar 的 / 为之开始,把这个作为 ROOT / , 然后把要找的类的包名当成子文件夹名来找一个 .class 文件 , 比如:classPath :  E:/classes;E:/lib/abc.jar  
    ( abc.jar 中有 /com/domain/site/MyClass.class , classes 下面有 /net/domain/site/YourClass.class)现在我要找 MyClass.class , 在 ClassLoader 看来: 目录结构如下:/com/domain/site/MyClass.class
    /net/domain/site/YourClass.class要找 com.domain.site.MyClass,
    ClassLoader 把 '.' 替换成 '/' , 然后开始搜索文件,这样 ClassLoader  的视野中,所有的东西都是从一个根开始的,但是 实际上 每个 jar 或 classFolder 都是一个 根, 就好像一个“树林”,classPath 中每个元素都是一棵树, ClassLoader 搜索一个 class 或按 classpath 中出现的顺序轮流查询每个 classFolder 或 jar ,如果按照上面的路径名替换能找到类的话就返回,也就是说如果有重复的前面的优先, 记住 它是从哪儿开始搜索的! 根在哪儿,对应到你的磁盘路径的什么地方,上面的这个 MyClass.class 包名是 com.domain.site, 所以当根 在 E:/classes 时,它应该出现在E:/classes/com/domain/site/MyClass.class 这个位置,先对准根,后面的就依次放置, YourClass.class 在一个 jar 中,他就应该在 /net/domain/site/YourClass.class 位置,如果不对的话,用 WinZip/WinRar 挪动一下位置。Java 采用包名,让不同的操作系统/不同的资源加载方式(比如Jar,HttpClassBase,FTPClassLoader)下,都为类加载提供一个同样的视图, 这样就让我们的代码跨平台,因为具体需要部署代码时,classpath 可以根据不同的情况指定,代码不需要修改, Java 通过这种方式很好地解决问题,也能很好的扩展类加载查询方式,能在分布式环境中使用(那个时候可能实现根本不知道类在什么地方,程序不停地广播自己已有的资源,其他的节点可以来下载) 。
      

  4.   

    个人觉得自己写的import一下就可以了,然后把这个包放在你的整个文件夹的lib下面
    我就是这么做的,不用上面说得这么麻烦
      

  5.   

    我的classpath变量的最开头有".",不就是代表当前路径了吗,为什么还是找不到呢?
      

  6.   

    没看清楚上面文章? 弄清楚概念是最重要的。你的类有个包名 MyPack, 如果你的 当前目录(或者你添加到了classPath中)在 C:/classes , 那么你运行时要保证它出现在 C:/classes/MyPack 目录下面, JVM 对 classpath 中的每一个条目请求一次搜索操作,当它以 C:/classes 作为搜索根时,那么你的 MyPack 包下的类就应该出现在 C:/classes/MyPack 这个位置,YourPack 包下的类就应该现在 C:/classes/YourPack 下面。你的 Balance 和 Balance 1 都在 MyPack 包中,
    所以假设你的 源文件夹在  C:/src 下面:
    那么你的 java 文件应该是这个位置:
    C:\src\MyPack\Balance.java
    C:\src\MyPack\Balance1.java
    C:\然后:
    C:\> md classes
    C:\> cd src
    C:\src\> javac -d C:\classes MyPack\Balance.java
    C:\src\> javac -d C:\classes MyPack\Balance1.java 
    C:\src\> javac -d C:\classes MyPack\TestBalance.javaC:\src\> cd ..\classes
    C:\classes\> java MyPack.AccountBalance  
    C:\AnotherPath\>java -cp C:\classes MyPack.AccountBalance注意每一个文件的位置和 你敲 javac 和 java 时当前目录的位置。
    当我在 C:\classes 位置时没有添加 classpath ,但是我在 C:\AnotherPath\> 时添加了 Classpath 
    C:\classes, 这样, JVM 尝试 以 C:/classes 目录为根, 以包名为子目录名搜索 AccountBalance.class 文件, 注意这里所说的 “以xxx为根”,弄明白我为什么强调过几次了。