我在各自的文件中有一本书中的以下示例代码,每个文件的名称与其中定义的接口或类相同:
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
但没有任何效果。这里有什么问题,我该如何解决?
答案 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