我不知道我的大腦是否愚弄我,或者這真的不起作用。Java抽象類「實例變量」
我需要不同類型的日誌記錄類的,所以我創建了一個抽象類,所有類都將具有相同的唯一定義是writeToLog的處理方式:
public abstract class LoggerTemplate {
protected String filename ="log/";
protected File logfile;
protected FileWriter fw;
public void writeToLog(String message) {
if(fw != null) {
try {
message = new SimpleDateFormat("dd-MM-hh:mm").format(new Date()) + " " + message;
fw.write(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
具體子類將實現邏輯的其餘部分在其構造,即其中之一:
public class JitterBufferLogger extends LoggerTemplate {
public JitterBufferLogger() {
super();
filename += new SimpleDateFormat("yyyyddMMhhmm'.log'").format(new Date());
if(!new File("log/").exists())
new File("log").mkdir();
logfile = new File(filename);
try {
logfile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
try {
fw = new FileWriter(logfile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但是,當我調試,我可以看到調用writeToLog特定記錄時,跳入LoggerTemplate方法,因此FW和日誌文件爲空。所以它不工作。
是不是它應該工作或做我只是亂七八糟的東西有點起來,應該進入週末;-)
這個「應該」工作(關於分配超類成員變量)。你是否調試過JitterBufferLogger的構造函數?大概是標準輸出到一個意想不到的位置,你錯過了堆棧跟蹤。另外,'log/.20122012.log'(斜槓)不是有效的文件名 - 請參閱logfile.createNewFile(文件名)。 – MartinK
請給出一個示例調用。 –
你是否打開文件編寫器檢查堆棧跟蹤? Per @ MartinK的評論,無效的文件名可能是你的問題。 –