私は開発中のクラスでバッファライタを定義していますが、問題があります。私は定義していますクラスのコンストラクタでBufferedWriter - プログラム実行中に途中で終了したストリーム
:
public class RestHandler {
public static BufferedWriter rest_logger;
public RestHandler(parsedXMLConfigData _config, BufferedWriter writer) {
rest_logger = writer;
try {
rest_logger.write("RestHandler instance finished init and ready to receive calls!" + "\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
これが動作し、私のファイルにテキストを出力します。私は私のクラスのメソッドの別の1で同じrest_logger
を使用しようとすると、しかし:
@POST
@Path("{subResources: [a-zA-Z0-9_/]+}")
public void postHandler
(
@Context final UriInfo uriInfo,
@PathParam("subResources") String subResources) {
try {
rest_logger.write("TEXT...");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
それは私のストリームに閉じ例外を与えます!私は、ストリームを閉じるためにこれを使用することを言及する必要があります:明確にするために例外ハンドラを削除
protected void finalize() throws Throwable {
rest_logger.close();
}
mycode(私の旧バージョン) –
+1を修正しました。 @MichaelA - JB Nizetが言及している点を除いて、あなたの問題の一つの原因は、あなたのBufferedWriterを静的にして、それを 'finalize()'メソッドで閉じることです。 finalizeは、***クラス***レベル変数を操作している***インスタンス***レベルメソッドです。 – Perception