我在..\WEB-INF\classes\db目录里创建了两个类,分别为UserInfo,UserRegist.我用UserRegist调用UserInfo.我单独编译UserInfo类可以通过,编译UserRegist类就会出现错误:
UserRegist.java:9: cannot resolve symbol
symbol  : class UserInfo
location: class db.UserRegist
    private UserInfo userinfo;但是我在..\WEB-INF\classes\db\目录用javac *.java 命令编译就都可以通过.小弟很是不解,还请高手帮帮忙,解决一下.以下是源码:
************** UserInfo ***************
package db;import java.util.Date;public class UserInfo
{
    private String UserId;
    private String Password;
    
    public String getUserId()
    {
        System.out.println("getUserid="+this.UserId);
        return this.UserId;   
    }
    
    public String getPassword()
    {
        System.out.println("getPassword="+this.Password);
        return this.Password;   
    }
    
    public void setUserId(String userid)
    {
        System.out.println("setUserid="+userid);
        this.UserId = userid;       
    }
    
    public void setPassword(String passwd)
    {
        System.out.println("setPasswd="+passwd);
        this.Password = passwd;   
    }
 
}
************** end UserInfo ************
************** UserRegist ***************
package db;import java.sql.*;public class UserRegist
{    private Connection conn;
    private UserInfo userinfo;
    
    public UserRegist()
    {
        String CLASSFORNAME = "org.gjt.mm.mysql.Driver";
        String Servanddb = "jdbc:mysql://localhost/mydatabase?user=root&password=1985";   
        
        try{
        
            Class.forName(CLASSFORNAME);
            conn = DriverManager.getConnection(Servanddb);
        
        }catch(Exception e){
            System.err.println("can't connect Database");
        }
    }
    
    public String GetNowDate(){
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        java.util.Date rightNow = new java.util.Date();
        String now = sdf.format(rightNow);
        
        return now;     
    }
    
    public void SetUserInfo(UserInfo user)
    {
        this.userinfo = user;
        System.out.println(" set User Info");        
    }
    
    public void executeInsert(String sql)
    {
        Statement stmt;
        try{
            stmt = conn.createStatement();
            stmt.executeUpdate(sql);
   stmt.close();
}catch(Exception e){
    System.out.println("ExecuteInsert error");   
}        
    }   
}************* end UserRegist ******************

解决方案 »

  1.   

    在..\WEB-INF\classes下用javac db/*.java
      

  2.   

    因为设了package所以照楼主这样做当然会出错,但是为什么 javac *.java 不会报错,请高人指点
      

  3.   

    可以把private UserInfo userinfo;改成friend UserInfo userinfo;试试
    小弟我觉得是访问权限不对!
    如果我说错了大家和楼主请见量!
      

  4.   

    谢谢各位的解答..
    BloodMaster(恍如隔世) :因为设了package所以照楼主这样做当然会出错/那为什么设了package 就会出错? 有点不理解. package不只是声明一个包名,好让其他类引用吗?
      

  5.   

    mofeir(莫飞) : 在..\WEB-INF\classes下用javac db/*.java必须用 *.java 吗? 为什么这样可以,可以讲解一下吗?
      

  6.   

    因为你在\WEB-INF\classes\db下编译的话,系统以为\WEB-INF\classes\db是一个classpath,所以JVM在编译的时候发现有个db包,所以它要去找\WEB-INF\classes\db\db\UserInfo.java文件,不知道你明白了没有。
    呵呵,如果你在环境变量中设置了...\WEB-INF\classes,那么编译应该没有问题的。我估计你现在的classpath包含 . 这个表示当前目录的符号。发现表达不是很清楚。
      

  7.   

    ..\WEB-INF\classes\设置到classpath了吗
      

  8.   

    不必要啊,你也可以在..\WEB-INF\classes下用javac db/UserRegist.javamofeir(莫飞) : 在..\WEB-INF\classes下用javac db/*.java必须用 *.java 吗? 为什么这样可以,可以讲解一下吗?
      

  9.   

    package db;
    import java.sql.*;
    ......
    private UserInfo userinfo;所以会去..\WEB-INF\classes\db\db文件夹下找UserInfo.class。
    因为UserInfo.java 编译好后UserInfo.class在..\WEB-INF\classes\db文件夹下,
    所以当然不会找到UserInfo.class
      

  10.   

    非常感谢各位的解答, 基本上小弟已经了解..特别感谢  mofeir(莫飞)  仁兄..结贴咯..
      

  11.   

    非常感谢各位仁兄的解答,小弟基本已经了解..特别感谢  mofeir(莫飞)   BloodMaster(恍如隔世). 结贴咯..