包<名称>不存在错误</name>

时间:2013-07-25 05:45:27

标签: java

我在各自的文件中有一本书中的以下示例代码,每个文件的名称与其中定义的接口或类相同:

Logger.java

package logging;

public interface Logger
{
   boolean connect();
   boolean disconnect();
   boolean log(String msg);
}  

LoggerFactory.java

package logging;

public abstract class LoggerFactory
{
   public final static int CONSOLE = 0;
   public final static int FILE = 1;

   public static Logger newLogger(int dstType, String... dstName)
   {
      switch (dstType)
      {
         case CONSOLE: return new Console(dstName.length == 0 ? null : dstName[0]);
         case FILE   : return new File(dstName.length == 0 ? null : dstName[0]);
         default     : return null;
      }
   }
}  

Console.java

package logging;

class Console implements Logger
{
   private String dstName;

   Console(String dstName)
   {
      this.dstName = dstName;
   }

   @Override
   public boolean connect()
   {
      return true;
   }

   @Override
   public boolean disconnect()
   {
      return true;
   }

   @Override
   public boolean log(String msg)
   {
      System.out.println(msg);
      return true;
   }
}  

File.java

package logging;

class File implements Logger
{
   private String dstName;

   File(String dstName)
   {
      this.dstName = dstName;
   }

   @Override
   public boolean connect()
   {
      if (dstName == null)
         return false;
      System.out.println("opening file " + dstName);
      return true;
   }

   @Override
   public boolean disconnect()
   {
      if (dstName == null)
         return false;
      System.out.println("closing file " + dstName);
      return true;
   }

   @Override
   public boolean log(String msg)
   {
      if (dstName == null)
         return false;
      System.out.println("writing "+msg+" to file " + dstName);
      return true;
   }
}  

TestLogger.java

// package logging;

import logging.Logger;
import logging.LoggerFactory;

public class TestLogger
{
   public static void main(String[] args)
   {
      Logger logger = LoggerFactory.newLogger(LoggerFactory.CONSOLE);
      if (logger.connect())
      {
         logger.log("test message #1");
         logger.disconnect();
      }
      else
         System.out.println("cannot connect to console-based logger");
      logger = LoggerFactory.newLogger(LoggerFactory.FILE, "x.txt");
      if (logger.connect())
      {
         logger.log("test message #2");
         logger.disconnect();
      }
      else
         System.out.println("cannot connect to file-based logger");
      logger = LoggerFactory.newLogger(LoggerFactory.FILE);
      if (logger.connect())
      {
         logger.log("test message #3");
         logger.disconnect();
      }
      else
         System.out.println("cannot connect to file-based logger");
   }
}  

所有这些文件都在名为logger的文件夹中。该书说,执行javac TestLogger.java应该找到并编译logger目录中的所有必要的类文件,但是我收到错误

TestLogger.java:3: error: package logging does not exist
import logging.Logger;
              ^  

其他错误主要与无法找到logging包有关。为什么这个程序不编译?我尝试创建CLASSPATH系统变量,该变量指向logging的父文件夹以及尝试
javac -classpath "parent_folder_of_logging" TestLogger.java但没有任何效果。这里有什么问题,我该如何解决?

4 个答案:

答案 0 :(得分:2)

转到记录的父文件夹并执行:

 javac logging/TestLogger.java

要在同一文件夹中执行,请执行

 java logging.TestLogger

答案 1 :(得分:1)

将所有文件放在记录器目录中

从记录器目录外执行

javac logging/TestLogger.java

答案 2 :(得分:1)

Class TestLogger必须在其他包中!

答案 3 :(得分:0)

基本上你需要将所有文件放在带有名称记录的目录中,然后从目录外部运行应用程序并使用

javac -cp classpath classname

java -cp classpath packagename.classname