メソッドを使用してログ ファイルに書き込もうとすると、宣言した StreamWriter が破棄されるという問題に直面しています。別のクラスからAttachPinkまたはAttachBlueを実行する場合を除いて、すべてが期待どおりに機能しています。その後、StreamWriter が破棄され、nullPointerException が発生します。
class Logs : IDisposable
{
//other declarations
private StreamWriter HistoryWriter;
private int ReportInterval = 0;
public void NewHistory()
{
HistoryWriter = new StreamWriter(HistoryLocation + HistoryName + HistoryExtension);
PrepareHistory();
}
private void PrepareHistory()
{
HistoryWriter.WriteLine("<html><body bgcolor='#000000'>");
/*
* Insert initial HTML tags
*/
}
public void SendHistory()
{
HistoryWriter.WriteLine("</body></html>");
/*
* Final HTML tags
*/
HistoryWriter.Close();
if (ReportInterval > 0)
{
/*
* Upload File
*/
}
else
{
Debug.WriteLine("ERROR: Report Interval for History has not been set");
}
NewHistory();
}
public void AttachPink(String message, StreamWriter writer)
{
writer.Write(
"<font color='DA1BE0'>"
+ message
+ "</font>");
}
public void AttachBlue(String message, StreamWriter writer)
{
writer.Write(
"<font color='0C93ED'>"
+ message
+ "</font>");
}
public StreamWriter getHistoryWriter()
{
return HistoryWriter;
}
public void SetHistoryInterval(int interval)
{
ReportInterval = interval;
}
public void Dispose()
{
if (HistoryWriter != null)
{
HistoryWriter.Close();
HistoryWriter.Dispose();
HistoryWriter = null;
}
}
}
メソッドを使用するには、次のように、別のクラス内で Logs クラスのインスタンスを宣言するだけです。
class UsingLogs
{
Logs logs = new Logs();
logs.NewHistory();
logs.AttachBlue("my message", logs.getHistoryWriter());
}
複数のメソッドにアクセスするときに、クラス変数の状態を保持する方法がわかりません。