基本的に2つの無限ループスレッドといくつかのGUI(Swing)を持つマルチスレッドプログラムがあります。私の 2 つの無限ループ スレッドには、次のような独自の log4j ロガーがあります。
static final Category LOG = Category.getInstance(RReceiver.class);
GUI で終了キーを検出したら、System.exit(0) を実行します。
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getKeyCode()!=27 && e.getKeyCode()!=KeyEvent.VK_BACK_SPACE) return false;
System.exit(0);
return true;
}
コンソールでの効果は次のようになります。
DEBUG 13:07:00,940 [Receiver] (RReceiver.java:93) - 応答 len:38 を取得
DEBUG 13:07:01,044 [Receiver] (RReceiver.java:93) - 応答 len:38 を取得
DEBUG 13:07:01,045 [レシーバー] (RReceiver.java:93) - 新しいステータス dev 4
log4j:WARN ロガー (com.normantech.ibcol.radiobox.RReceiver) のアペンダーが見つかりませんでした。
log4j:WARN log4j システムを適切に初期化してください。
警告は常に表示されるわけではありません。間違った初期化シーケンスがあると思われますが、それを理解できません。なぜそれが起こっているのですか?LogManager.shutdown(); を使用しようとしました。しかし、それは役に立ちませんでした。私は無限ループをうまく終わらせようとしましたが、それは最善の解決策ではありません.IIは追加の Thread.sleep(x) を配置する必要があり、別の x を試しましたが、これが役立つかどうかは実際にはわかりませんでした.