From 7be65a0428a4527889b6955c56aafdb81dda28a8 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期六, 22 十一月 2025 11:20:39 +0800
Subject: [PATCH] 开启状态线程,优化结束程序逻辑

---
 bin/home/CardMachineUI.class                    |    0 
 bin/chuankou/SerialPortConnectionDialog.class   |    0 
 bin/chuankou/SerialPortConnectionDialog$1.class |    0 
 err.properties                                  |   12 
 src/home/Homein.java                            |   67 +++++
 src/jiekou/lunxunkazhuangtai.java               |  371 ++++++++++++++++++------------
 bin/home/CardMachineUI$1.class                  |    0 
 bin/home/Homein.class                           |    0 
 src/chuankou/SerialPortConnectionDialog.java    |   57 ++++
 log.properties                                  |  100 +++++--
 src/home/CardMachineUI.java                     |   98 +++++--
 11 files changed, 479 insertions(+), 226 deletions(-)

diff --git a/bin/chuankou/SerialPortConnectionDialog$1.class b/bin/chuankou/SerialPortConnectionDialog$1.class
index 96451c2..d78b74c 100644
--- a/bin/chuankou/SerialPortConnectionDialog$1.class
+++ b/bin/chuankou/SerialPortConnectionDialog$1.class
Binary files differ
diff --git a/bin/chuankou/SerialPortConnectionDialog.class b/bin/chuankou/SerialPortConnectionDialog.class
index 9dfdc84..61a965f 100644
--- a/bin/chuankou/SerialPortConnectionDialog.class
+++ b/bin/chuankou/SerialPortConnectionDialog.class
Binary files differ
diff --git a/bin/home/CardMachineUI$1.class b/bin/home/CardMachineUI$1.class
index 3663706..bb42bbf 100644
--- a/bin/home/CardMachineUI$1.class
+++ b/bin/home/CardMachineUI$1.class
Binary files differ
diff --git a/bin/home/CardMachineUI.class b/bin/home/CardMachineUI.class
index 3340287..fc0d3b9 100644
--- a/bin/home/CardMachineUI.class
+++ b/bin/home/CardMachineUI.class
Binary files differ
diff --git a/bin/home/Homein.class b/bin/home/Homein.class
index 871b789..3055970 100644
--- a/bin/home/Homein.class
+++ b/bin/home/Homein.class
Binary files differ
diff --git a/err.properties b/err.properties
index e3b5601..79be55e 100644
--- a/err.properties
+++ b/err.properties
@@ -1,10 +1,2 @@
-#\u64CD\u4F5C\u65E5\u5FD7\u8BB0\u5F55 - \u6700\u540E\u66F4\u65B0: Fri Nov 21 15:53:26 CST 2025
-#Fri Nov 21 15:53:26 CST 2025
-log_1763709005376_be67189d=[2025-11-21 15\:10\:05] 鍙栧崱鎿嶄綔锛�12132232
-log_1763709010792_533f9544=[2025-11-21 15\:10\:10] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
-log_1763711606778_258ce9b3=[2025-11-21 15\:53\:26] [15\:53\:26.776] 鍙戦�佸け璐ワ紝姝e湪閲嶈瘯 (1/2)
-log_1763711606820_621ce6a5=[2025-11-21 15\:53\:26] [15\:53\:26.820] 鍙戦�佸け璐ワ紝姝e湪閲嶈瘯 (1/2)
-log_1763711606821_a4bb65ce=[2025-11-21 15\:53\:26] [15\:53\:26.821] 鍙戦�佸け璐ワ紝姝e湪閲嶈瘯 (1/2)
-log_1763711606822_e9cc5b23=[2025-11-21 15\:53\:26] [15\:53\:26.822] 鍙戦�佸け璐ワ紝姝e湪閲嶈瘯 (1/2)
-log_1763711606823_1da1f119=[2025-11-21 15\:53\:26] [15\:53\:26.823] 鍙戦�佸け璐ワ紝姝e湪閲嶈瘯 (1/2)
-log_1763711606824_15788a29=[2025-11-21 15\:53\:26] lunxun杩炵画澶辫触娆℃暟杩囧锛屾殏鍋滆疆璇�
+#\u53D1\u5361\u673A\u9519\u8BEF\u8BB0\u5F55 - \u6240\u6709\u8BB0\u5F55\u5DF2\u6E05\u7A7A
+#Fri Nov 21 19:35:34 CST 2025
diff --git a/log.properties b/log.properties
index 15d42da..e2762a8 100644
--- a/log.properties
+++ b/log.properties
@@ -1,33 +1,67 @@
-#\u64CD\u4F5C\u65E5\u5FD7\u8BB0\u5F55 - \u6700\u540E\u66F4\u65B0: Fri Nov 21 17:44:41 CST 2025
-#Fri Nov 21 17:44:41 CST 2025
-log_1763718093181_61c0dfbe=[2025-11-21 17\:41\:33] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
-log_1763718093533_c3563f25=[2025-11-21 17\:41\:33] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
-log_1763718147310_e84a6b5b=[2025-11-21 17\:42\:27] 鍙栧崱鎿嶄綔锛氬崱妲�22琚鐞嗗憳鍙栧崱
-log_1763718150490_e2f94107=[2025-11-21 17\:42\:30] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
-log_1763718150843_c9147690=[2025-11-21 17\:42\:30] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
-log_1763718198841_27d9aa77=[2025-11-21 17\:43\:18] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
-log_1763718199155_4cd5e39f=[2025-11-21 17\:43\:19] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
-log_1763718207706_07760e2f=[2025-11-21 17\:43\:27] DDCC0008F003515AA55AA5027A7E;type2鎺у埗鎵撳紑3鏌滈棬
-log_1763718208053_ee80022a=[2025-11-21 17\:43\:28] 3鍙峰崱妲藉彇鍗″け璐�
-log_1763718208759_e8be3ec0=[2025-11-21 17\:43\:28] DDCC0008F003515AA55AA5027A7E;type2鎺у埗鎵撳紑3鏌滈棬
-log_1763718209104_247397ce=[2025-11-21 17\:43\:29] 鍙栧崱鎿嶄綔锛氬崱妲�3琚鐞嗗憳鍙栧崱
-log_1763718275945_e2a4d769=[2025-11-21 17\:44\:35] DDCC0008F012515AA55AA5027B7F;type2鎺у埗鎵撳紑18鏌滈棬
-log_1763718276293_034826af=[2025-11-21 17\:44\:36] 鍙栧崱鎿嶄綔锛氬崱妲�18琚鐞嗗憳鍙栧崱
-log_1763718276666_18777eee=[2025-11-21 17\:44\:36] DDCC0008F017515AA55AA5027B2A;type2鎺у埗鎵撳紑23鏌滈棬
-log_1763718276992_c9ad983a=[2025-11-21 17\:44\:36] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
-log_1763718277268_15912a52=[2025-11-21 17\:44\:37] DDCC0008F01C515AA55AA502BB90;type2鎺у埗鎵撳紑28鏌滈棬
-log_1763718277593_d9b897ba=[2025-11-21 17\:44\:37] 鍙栧崱鎿嶄綔锛氬崱妲�28琚鐞嗗憳鍙栧崱
-log_1763718277892_72d570bd=[2025-11-21 17\:44\:37] DDCC0008F018515AA55AA5027BD5;type2鎺у埗鎵撳紑24鏌滈棬
-log_1763718278242_75327d86=[2025-11-21 17\:44\:38] 鍙栧崱鎿嶄綔锛氬崱妲�24琚鐞嗗憳鍙栧崱
-log_1763718278782_a91dddda=[2025-11-21 17\:44\:38] DDCC0008F00E515AA55AA502BAA2;type2鎺у埗鎵撳紑14鏌滈棬
-log_1763718279143_4e4cb89a=[2025-11-21 17\:44\:39] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
-log_1763718279202_9c58a3b9=[2025-11-21 17\:44\:39] DDCC0008F013515AA55AA502BB6F;type2鎺у埗鎵撳紑19鏌滈棬
-log_1763718279543_9e40ceff=[2025-11-21 17\:44\:39] 鍙栧崱鎿嶄綔锛氬崱妲�19琚鐞嗗憳鍙栧崱
-log_1763718279709_4483c6c4=[2025-11-21 17\:44\:39] DDCC0008F01D515AA55AA5027B80;type2鎺у埗鎵撳紑29鏌滈棬
-log_1763718280043_06750db2=[2025-11-21 17\:44\:40] 鍙栧崱鎿嶄綔锛氬崱妲�29琚鐞嗗憳鍙栧崱
-log_1763718280658_b6288ce6=[2025-11-21 17\:44\:40] DDCC0008F00F515AA55AA5027AB2;type2鎺у埗鎵撳紑15鏌滈棬
-log_1763718280993_f6f218cc=[2025-11-21 17\:44\:40] 鍙栧崱鎿嶄綔锛氬崱妲�15琚鐞嗗憳鍙栧崱
-log_1763718281030_2d1edd96=[2025-11-21 17\:44\:41] DDCC0008F014515AA55AA5027B19;type2鎺у埗鎵撳紑20鏌滈棬
-log_1763718281392_c8b2ee8c=[2025-11-21 17\:44\:41] 鍙栧崱鎿嶄綔锛氬崱妲�20琚鐞嗗憳鍙栧崱
-log_1763718281404_56d7aa71=[2025-11-21 17\:44\:41] DDCC0008F019515AA55AA502BBC5;type2鎺у埗鎵撳紑25鏌滈棬
-log_1763718281743_12a79e45=[2025-11-21 17\:44\:41] 鍙栧崱鎿嶄綔锛氬崱妲�25琚鐞嗗憳鍙栧崱
+#\u64CD\u4F5C\u65E5\u5FD7\u8BB0\u5F55 - \u6700\u540E\u66F4\u65B0: Fri Nov 21 19:36:06 CST 2025
+#Fri Nov 21 19:36:06 CST 2025
+log_1763724957486_7ed8425e=[2025-11-21 19\:35\:57] 鍙栧崱鎿嶄綔锛氬崱妲�1琚鐞嗗憳鍙栧崱
+log_1763724957585_8967e0b2=[2025-11-21 19\:35\:57] 鍙栧崱鎿嶄綔锛氬崱妲�2琚鐞嗗憳鍙栧崱
+log_1763724957735_6574dba5=[2025-11-21 19\:35\:57] 鍙栧崱鎿嶄綔锛氬崱妲�3琚鐞嗗憳鍙栧崱
+log_1763724957835_0f410589=[2025-11-21 19\:35\:57] 鍙栧崱鎿嶄綔锛氬崱妲�4琚鐞嗗憳鍙栧崱
+log_1763724957935_854f0c49=[2025-11-21 19\:35\:57] 鍙栧崱鎿嶄綔锛氬崱妲�5琚鐞嗗憳鍙栧崱
+log_1763724958035_36f51e22=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�6琚鐞嗗憳鍙栧崱
+log_1763724958135_0945adfb=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�7琚鐞嗗憳鍙栧崱
+log_1763724958235_280878bc=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�8琚鐞嗗憳鍙栧崱
+log_1763724958335_62c3daf7=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�9琚鐞嗗憳鍙栧崱
+log_1763724958435_09f4db94=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�10琚鐞嗗憳鍙栧崱
+log_1763724958534_066792c4=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�11琚鐞嗗憳鍙栧崱
+log_1763724958635_6099e667=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
+log_1763724958735_83166056=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
+log_1763724958834_1765f7e9=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
+log_1763724958935_e316b9ce=[2025-11-21 19\:35\:58] 鍙栧崱鎿嶄綔锛氬崱妲�15琚鐞嗗憳鍙栧崱
+log_1763724959085_65c537e7=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�16琚鐞嗗憳鍙栧崱
+log_1763724959134_aa6dc9d6=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�17琚鐞嗗憳鍙栧崱
+log_1763724959285_77b24bbc=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�18琚鐞嗗憳鍙栧崱
+log_1763724959385_64338885=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�19琚鐞嗗憳鍙栧崱
+log_1763724959486_5916ce74=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�20琚鐞嗗憳鍙栧崱
+log_1763724959585_6384a4cc=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�21琚鐞嗗憳鍙栧崱
+log_1763724959685_7d45eb0b=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�22琚鐞嗗憳鍙栧崱
+log_1763724959786_4aa7ca6f=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
+log_1763724959885_da92954b=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�24琚鐞嗗憳鍙栧崱
+log_1763724959985_277f652c=[2025-11-21 19\:35\:59] 鍙栧崱鎿嶄綔锛氬崱妲�25琚鐞嗗憳鍙栧崱
+log_1763724960086_aa7cf203=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�26琚鐞嗗憳鍙栧崱
+log_1763724960185_2848a5cc=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�27琚鐞嗗憳鍙栧崱
+log_1763724960287_3b4bb2ab=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�28琚鐞嗗憳鍙栧崱
+log_1763724960386_f261ef41=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�29琚鐞嗗憳鍙栧崱
+log_1763724960535_97afbeaf=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�30琚鐞嗗憳鍙栧崱
+log_1763724960634_8c0920c2=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�31琚鐞嗗憳鍙栧崱
+log_1763724960735_06ce365d=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�32琚鐞嗗憳鍙栧崱
+log_1763724960835_cbfa348a=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�33琚鐞嗗憳鍙栧崱
+log_1763724960934_0e4d07c0=[2025-11-21 19\:36\:00] 鍙栧崱鎿嶄綔锛氬崱妲�34琚鐞嗗憳鍙栧崱
+log_1763724961035_8b4bd8fe=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�35琚鐞嗗憳鍙栧崱
+log_1763724961135_0b4d5de9=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�36琚鐞嗗憳鍙栧崱
+log_1763724961236_a767eee0=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�37琚鐞嗗憳鍙栧崱
+log_1763724961335_822c08d8=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�38琚鐞嗗憳鍙栧崱
+log_1763724961435_db3ec62e=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�39琚鐞嗗憳鍙栧崱
+log_1763724961534_5fefc851=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�40琚鐞嗗憳鍙栧崱
+log_1763724961635_e21db5ef=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�41琚鐞嗗憳鍙栧崱
+log_1763724961735_a48231c4=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�42琚鐞嗗憳鍙栧崱
+log_1763724961836_be19a1e4=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�43琚鐞嗗憳鍙栧崱
+log_1763724961935_d9a52997=[2025-11-21 19\:36\:01] 鍙栧崱鎿嶄綔锛氬崱妲�44琚鐞嗗憳鍙栧崱
+log_1763724962085_81151e8b=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�45琚鐞嗗憳鍙栧崱
+log_1763724962186_40dd031b=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�46琚鐞嗗憳鍙栧崱
+log_1763724962285_2b8f9092=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�47琚鐞嗗憳鍙栧崱
+log_1763724962385_8abe459c=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�48琚鐞嗗憳鍙栧崱
+log_1763724962485_852ad173=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�49琚鐞嗗憳鍙栧崱
+log_1763724962585_e5e73d2c=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�50琚鐞嗗憳鍙栧崱
+log_1763724962685_896c53e3=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�51琚鐞嗗憳鍙栧崱
+log_1763724962786_ab983c5b=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�52琚鐞嗗憳鍙栧崱
+log_1763724962885_8687a0c3=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�53琚鐞嗗憳鍙栧崱
+log_1763724962985_3709588c=[2025-11-21 19\:36\:02] 鍙栧崱鎿嶄綔锛氬崱妲�54琚鐞嗗憳鍙栧崱
+log_1763724963085_3f4cc469=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
+log_1763724963185_6e98de49=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�56琚鐞嗗憳鍙栧崱
+log_1763724963285_41af6941=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�57琚鐞嗗憳鍙栧崱
+log_1763724963385_3af18a57=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
+log_1763724963387_fe428ae2=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�58琚鐞嗗憳鍙栧崱
+log_1763724963535_1c1b689f=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�59琚鐞嗗憳鍙栧崱
+log_1763724963636_7ca29f16=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�60琚鐞嗗憳鍙栧崱
+log_1763724963685_d33f12b8=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
+log_1763724963985_8ee47f7c=[2025-11-21 19\:36\:03] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
+log_1763724964285_ddff2a15=[2025-11-21 19\:36\:04] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
+log_1763724966171_1001bb5c=[2025-11-21 19\:36\:06] 绠$悊鍛樺凡灏嗗叏閮ㄥ崱妲藉凡缁忔墦寮�璇峰彇鍗�
diff --git a/src/chuankou/SerialPortConnectionDialog.java b/src/chuankou/SerialPortConnectionDialog.java
index 1f8d200..764c1b5 100644
--- a/src/chuankou/SerialPortConnectionDialog.java
+++ b/src/chuankou/SerialPortConnectionDialog.java
@@ -183,6 +183,8 @@
         exitButton.setFocusPainted(false);
         exitButton.setBorder(BorderFactory.createEmptyBorder(8, 20, 8, 20));
         exitButton.addActionListener(e -> {
+            // 鏂板锛氶��鍑哄墠纭繚鍏抽棴涓插彛杩炴帴
+            cleanupSerialPort();
             System.exit(0);
         });
         
@@ -303,14 +305,63 @@
                         });
                         
                     } else {
-                        // 杩炴帴澶辫触澶勭悊淇濇寔涓嶅彉...
+                        // 杩炴帴澶辫触
+                        connectButton.setEnabled(true);
+                        connectButton.setText("杩炴帴涓插彛");
+                        connectButton.setBackground(SECONDARY_COLOR);
+                        statusLabel.setText("涓插彛杩炴帴澶辫触: " + portName);
+                        showMessage("杩炴帴澶辫触", "鏃犳硶杩炴帴鍒颁覆鍙� " + portName, "error");
+                        
+                        // 鍏抽棴澶辫触鐨勪覆鍙h繛鎺�
+                        if (serialService != null) {
+                            serialService.close();
+                            serialService = null;
+                        }
                     }
                 });
                 
             } catch (Exception e) {
-                // 寮傚父澶勭悊淇濇寔涓嶅彉...
+                SwingUtilities.invokeLater(() -> {
+                    connectButton.setEnabled(true);
+                    connectButton.setText("杩炴帴涓插彛");
+                    connectButton.setBackground(SECONDARY_COLOR);
+                    statusLabel.setText("杩炴帴寮傚父: " + e.getMessage());
+                    showMessage("杩炴帴寮傚父", "涓插彛杩炴帴杩囩▼涓彂鐢熼敊璇�: " + e.getMessage(), "error");
+                    
+                    // 鍏抽棴寮傚父鐨勪覆鍙h繛鎺�
+                    if (serialService != null) {
+                        serialService.close();
+                        serialService = null;
+                    }
+                });
             }
         }).start();
+    }
+    
+    /**
+     * 鏂板锛氭竻鐞嗕覆鍙h祫婧愮殑鏂规硶
+     */
+    private void cleanupSerialPort() {
+        if (serialService != null) {
+            try {
+                // 鍋滄鏁版嵁鎹曡幏
+                serialService.stopCapture();
+                
+                // 鍋滄鍗忚瑙f瀽鍣�
+                if (serialService.getProtocolParser() != null) {
+                    serialService.getProtocolParser().stop();
+                }
+                
+                // 鍏抽棴涓插彛
+                serialService.close();
+                
+                //System.out.println("涓插彛杩炴帴宸叉竻鐞�");
+            } catch (Exception e) {
+                System.err.println("娓呯悊涓插彛璧勬簮鏃跺彂鐢熷紓甯�: " + e.getMessage());
+            } finally {
+                serialService = null;
+            }
+        }
     }
     
     private void showMessage(String title, String message, String type) {
@@ -351,7 +402,7 @@
     public void dispose() {
         // 濡傛灉杩炴帴澶辫触锛屽叧闂覆鍙�
         if (!isConnected && serialService != null) {
-            serialService.close();
+            cleanupSerialPort();
         }
         super.dispose();
     }
diff --git a/src/home/CardMachineUI.java b/src/home/CardMachineUI.java
index caa3f4a..4479e23 100644
--- a/src/home/CardMachineUI.java
+++ b/src/home/CardMachineUI.java
@@ -87,7 +87,14 @@
 	        initializeUI();
 	        initializeSlots();
 	        startUIUpdates(); // UI鍒锋柊瀹氭椂鍣�
-	        startSerialStatusMonitoring(); // 涓插彛鐘舵�佺洃鎺�        
+	        startSerialStatusMonitoring(); // 涓插彛鐘舵�佺洃鎺�
+	        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+	        addWindowListener(new java.awt.event.WindowAdapter() {
+	            @Override
+	            public void windowClosing(java.awt.event.WindowEvent windowEvent) {
+	                dispose(); // 璋冪敤鎴戜滑淇敼杩囩殑dispose鏂规硶
+	            }
+	        });
 	        
 	        //System.out.println("涓荤晫闈㈠垵濮嬪寲瀹屾垚");
 	    } catch (Exception e) {
@@ -596,34 +603,67 @@
 	}
 	
 	public void dispose() {
-		// 鍋滄UI鍒锋柊瀹氭椂鍣�
-		if (uiUpdateTimer != null) {
-			uiUpdateTimer.stop();
-		}
-		
-		// 鍋滄涓插彛鐘舵�佺洃鎺�
-		if (serialStatusTimer != null) {
-			serialStatusTimer.stop();
-		}
-		
-		// 鍋滄杞鏌ヨ
-		if (lunxun.isPolling()) {
-			lunxun.stopPolling();
-			//System.out.println("搴旂敤绋嬪簭鍏抽棴锛岃疆璇㈡煡璇㈠凡鍋滄");
-		}
-		
-		// 鍋滄涓插彛鍗忚瑙f瀽鍣紙鏂板锛�
-		if (serialProtocolParser != null) {
-			serialProtocolParser.stop();
-		}
-		
-		// 鍋滄涓插彛鏈嶅姟
-		if (serialPortService != null) {
-			serialPortService.stopCapture();
-			serialPortService.close();
-		}
-		
-		super.dispose();
+		int result = JOptionPane.showConfirmDialog(this, 
+			    "纭畾瑕侀��鍑虹▼搴忓悧锛�", 
+			    "纭閫�鍑�", 
+			    JOptionPane.YES_NO_OPTION);
+			if (result != JOptionPane.YES_OPTION) {
+			    return; // 鐢ㄦ埛鍙栨秷閫�鍑�
+			}
+	    
+	    // 鍋滄UI鍒锋柊瀹氭椂鍣�
+	    if (uiUpdateTimer != null) {
+	        uiUpdateTimer.stop();
+	    }
+	    
+	    // 鍋滄涓插彛鐘舵�佺洃鎺�
+	    if (serialStatusTimer != null) {
+	        serialStatusTimer.stop();
+	    }
+	    
+	    // 鍋滄杞鏌ヨ
+	    if (lunxun.isPolling()) {
+	        lunxun.stopPolling();
+	        //System.out.println("搴旂敤绋嬪簭鍏抽棴锛岃疆璇㈡煡璇㈠凡鍋滄");
+	    }
+	    
+	    // 鍋滄涓插彛鍗忚瑙f瀽鍣紙鏂板锛�
+	    if (serialProtocolParser != null) {
+	        serialProtocolParser.stop();
+	    }
+	    
+	    // 鍋滄涓插彛鏈嶅姟
+	    if (serialPortService != null) {
+	        serialPortService.stopCapture();
+	        serialPortService.close();
+	    }
+	    
+	    super.dispose();
+	    
+	    // 鏂板锛氱‘淇濈▼搴忓畬鍏ㄩ��鍑哄墠閲婃斁鍗曞疄渚嬮攣
+	    try {
+	        // 閫氳繃鍙嶅皠璋冪敤 Homein 鐨勬竻鐞嗘柟娉�
+	        Class<?> homeinClass = Class.forName("home.Homein");
+	        java.lang.reflect.Method cleanupMethod = homeinClass.getDeclaredMethod("cleanupSingleInstanceLock");
+	        cleanupMethod.setAccessible(true);
+	        cleanupMethod.invoke(null);
+	        //System.out.println("鍗曞疄渚嬮攣宸查噴鏀�");
+	    } catch (Exception e) {
+	        System.err.println("閲婃斁鍗曞疄渚嬮攣鏃跺彂鐢熷紓甯�: " + e.getMessage());
+	        // 濡傛灉鍙嶅皠澶辫触锛屽皾璇曠洿鎺ュ叧闂鍙�
+	        try {
+	            java.net.ServerSocket socket = new java.net.ServerSocket();
+	            socket.setReuseAddress(true);
+	            socket.bind(new java.net.InetSocketAddress(9999));
+	            socket.close();
+	            //System.out.println("閫氳繃鐩存帴缁戝畾鏂瑰紡閲婃斁绔彛");
+	        } catch (Exception ex) {
+	            System.err.println("鐩存帴閲婃斁绔彛涔熷け璐�: " + ex.getMessage());
+	        }
+	    }
+	    
+	    // 鏂板锛氱‘淇濈▼搴忓畬鍏ㄩ��鍑�
+	    System.exit(0);
 	}
 	
 	/**
diff --git a/src/home/Homein.java b/src/home/Homein.java
index d0de3f1..26f2139 100644
--- a/src/home/Homein.java
+++ b/src/home/Homein.java
@@ -6,9 +6,25 @@
 import chushihua.Chushihua;
 import chushihua.SlotManager;
 import chushihua.lunxun;
+import dialog.Dingshidialog;
+import jiekou.lunxunkazhuangtai;
+
+import java.io.IOException;
+import java.net.ServerSocket;
 
 public class Homein {
+    // 鍗曞疄渚嬮攣鐨勭鍙e彿锛岄�夋嫨涓�涓笉甯哥敤鐨勭鍙�
+    private static final int SINGLE_INSTANCE_PORT = 9999;
+    private static ServerSocket singleInstanceSocket;
+    
     public static void main(String[] args) {
+        // 妫�鏌ユ槸鍚﹀凡鏈夊疄渚嬪湪杩愯
+        if (!checkSingleInstance()) {            
+            Dingshidialog.showTimedDialog(null,5, "杞欢宸茬粡鍦ㄨ繍琛屼腑锛屼笉鑳介噸澶嶆墦寮�锛�");
+            System.exit(0);
+            return;
+        }
+        
         SwingUtilities.invokeLater(() -> {
             try {
                 // 璁剧疆绯荤粺澶栬
@@ -26,6 +42,7 @@
                         "绯荤粺鍒濆鍖栧け璐ワ紝鏃犳硶鍚姩搴旂敤绋嬪簭", 
                         "閿欒", 
                         JOptionPane.ERROR_MESSAGE);
+                    cleanupSingleInstanceLock();
                     System.exit(1);
                 }
                 
@@ -35,9 +52,50 @@
                     "绋嬪簭鍚姩澶辫触: " + e.getMessage(), 
                     "閿欒", 
                     JOptionPane.ERROR_MESSAGE);
+                cleanupSingleInstanceLock();
                 System.exit(1);
             }
         });        
+    }
+    
+    /**
+     * 妫�鏌ユ槸鍚﹀崟瀹炰緥杩愯
+     * @return 濡傛灉鏄敮涓�瀹炰緥杩斿洖true锛屽鏋滃凡鏈夊疄渚嬭繍琛岃繑鍥瀎alse
+     */
+    private static boolean checkSingleInstance() {
+        try {
+            // 灏濊瘯缁戝畾鍒版寚瀹氱鍙o紝濡傛灉鎴愬姛璇存槑鏄涓�涓疄渚�
+            singleInstanceSocket = new ServerSocket(SINGLE_INSTANCE_PORT);
+            return true;
+        } catch (IOException e) {
+            // 绔彛宸茶鍗犵敤锛岃鏄庡凡鏈夊疄渚嬪湪杩愯
+            return false;
+        }
+    }
+    
+    /**
+     * 娓呯悊鍗曞疄渚嬮攣 - 鏀逛负鍏叡闈欐�佹柟娉曚互渚垮閮ㄨ皟鐢�
+     */
+    public static void cleanupSingleInstanceLock() {
+        if (singleInstanceSocket != null && !singleInstanceSocket.isClosed()) {
+            try {
+                singleInstanceSocket.close();
+                //System.out.println("鍗曞疄渚嬮攣宸叉竻鐞�");
+            } catch (IOException e) {
+                System.err.println("鍏抽棴鍗曞疄渚嬮攣鏃跺彂鐢熷紓甯�: " + e.getMessage());
+            } finally {
+                singleInstanceSocket = null;
+            }
+        }
+        
+        // 棰濆纭繚锛氬皾璇曞啀娆$粦瀹氱鍙f潵纭鏄惁宸查噴鏀�
+        try {
+            ServerSocket testSocket = new ServerSocket(SINGLE_INSTANCE_PORT);
+            testSocket.close();
+            //System.out.println("绔彛纭宸查噴鏀�");
+        } catch (IOException e) {
+            System.err.println("绔彛鍙兘浠嶈鍗犵敤: " + e.getMessage());
+        }
     }
     
     /**
@@ -127,11 +185,14 @@
             if (serialConnected) {
                 // 4. 涓插彛杩炴帴鎴愬姛鍚庯紝鍚姩杞
                 startPollingService();
-                showMainInterface();                
+                showMainInterface();
+                lunxunkazhuangtai.startPolling();//鍚姩鍗$姸鎬佽疆璇㈠彂缁欐湇鍔″櫒
+                
                 
             } else {
                 System.err.println("涓插彛杩炴帴澶辫触");
                 // 涓插彛杩炴帴澶辫触宸茬粡鐢盨erialPortConnectionDialog澶勭悊锛岀洿鎺ラ��鍑�
+                cleanupSingleInstanceLock();
                 System.exit(0);
             }
             
@@ -142,6 +203,7 @@
                 "搴旂敤绋嬪簭鍚姩杩囩▼涓彂鐢熼敊璇�: " + e.getMessage(), 
                 "閿欒", 
                 JOptionPane.ERROR_MESSAGE);
+            cleanupSingleInstanceLock();
             System.exit(1);
         }
     }
@@ -267,6 +329,9 @@
                     mainUI.dispose();
                 }
                 
+                // 娓呯悊鍗曞疄渚嬮攣 - 纭繚鍦ㄥ叧闂挬瀛愪腑涔熻皟鐢�
+                cleanupSingleInstanceLock();
+                
                 //System.out.println("搴旂敤绋嬪簭鍏抽棴瀹屾垚");
                 
             } catch (Exception e) {
diff --git a/src/jiekou/lunxunkazhuangtai.java b/src/jiekou/lunxunkazhuangtai.java
index 5ebd582..d174626 100644
--- a/src/jiekou/lunxunkazhuangtai.java
+++ b/src/jiekou/lunxunkazhuangtai.java
@@ -2,174 +2,245 @@
 import chushihua.SlotManager;
 import home.Fkj;
 
-
 /**
  * 杞鍗℃Ы鐘舵�佺被
  * 鐢ㄤ簬瀹氭湡杞骞惰緭鍑烘墍鏈夊崱妲界殑鐘舵�佷俊鎭�
  */
 public class lunxunkazhuangtai {
-	private static Thread pollThread;
-	private static volatile boolean isRunning = false;
-	private static final int POLL_INTERVAL = 30000; // 30绉掗棿闅�
+    private static Thread pollThread;
+    private static volatile boolean isRunning = false;
+    private static volatile int pollInterval = 30000; // 30绉掗棿闅旓紝鏀逛负鍙彉鐨�
+    
+    // 甯搁噺瀹氫箟锛岄伩鍏嶉噸澶嶅垱寤哄瓧绗︿覆
+    private static final String THREAD_NAME = "SlotStatusPollingThread";
+    private static final String UNKNOWN = "鏈煡";
+    private static final String NORMAL = "姝e父";
+    private static final String NULL_VALUE = "null";
+    
+    // 鐘舵�佸父閲�
+    private static final String STATUS_INVALID = "0";
+    private static final String STATUS_STANDBY = "1";
+    private static final String STATUS_CHARGING = "2";
+    private static final String STATUS_FULL = "3";
+    private static final String STATUS_FAULT = "4";
+    private static final String STATUS_AUTH_EXPIRED = "5";
+    private static final String STATUS_TIMEOUT = "6";
+    private static final String STATUS_UNKNOWN = "-1";
+    
+    // 鏁呴殰甯搁噺
+    private static final String FAULT_NORMAL = "0";
+    private static final String FAULT_CARD_ERROR = "1";
+    private static final String FAULT_OVER_CURRENT = "2";
+    private static final String FAULT_DOOR_FAULT = "3";
+    private static final String FAULT_OVER_VOLTAGE = "4";
+    private static final String FAULT_UNDER_VOLTAGE = "5";
+    private static final String FAULT_UNKNOWN = "-1";
 
-	/**
-	 * 鍚姩杞绾跨▼
-	 */
-	public static void startPolling() {
-		if (isRunning) {;
-			return;
-		}
+    /**
+     * 鍚姩杞绾跨▼
+     */
+    public static void startPolling() {
+        if (isRunning) {
+            System.out.println("杞绾跨▼宸插湪杩愯涓�");
+            return;
+        }
 
-		isRunning = true;
-		pollThread = new Thread(new PollingTask(), "SlotStatusPollingThread");
-		pollThread.setDaemon(true); // 璁剧疆涓哄畧鎶ょ嚎绋嬶紝褰撲富绾跨▼缁撴潫鏃惰嚜鍔ㄧ粨鏉�
-		pollThread.start();
-	}
+        isRunning = true;
+        pollThread = new Thread(new PollingTask(), THREAD_NAME);
+        pollThread.setDaemon(true);
+        pollThread.start();
+        System.out.println("鍗℃Ы鐘舵�佽疆璇㈢嚎绋嬪凡鍚姩锛岄棿闅�: " + pollInterval + "ms");
+    }
 
-	/**
-	 * 鍋滄杞绾跨▼
-	 */
-	public static void stopPolling() {
-		isRunning = false;
-		if (pollThread != null) {
-			pollThread.interrupt();
-			pollThread = null;
-		}
-		System.out.println("鍗℃Ы鐘舵�佽疆璇㈢嚎绋嬪凡鍋滄");
-	}
+    /**
+     * 鍋滄杞绾跨▼
+     */
+    public static void stopPolling() {
+        if (!isRunning) {
+            return;
+        }
+        
+        isRunning = false;
+        if (pollThread != null) {
+            pollThread.interrupt();
+            try {
+                // 绛夊緟绾跨▼瀹夊叏缁撴潫锛屾渶澶氱瓑寰�2绉�
+                pollThread.join(2000);
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                System.out.println("绛夊緟杞绾跨▼鍋滄鏃惰涓柇");
+            }
+            pollThread = null;
+        }
+        System.out.println("鍗℃Ы鐘舵�佽疆璇㈢嚎绋嬪凡鍋滄");
+    }
 
-	/**
-	 * 妫�鏌ヨ疆璇㈢嚎绋嬫槸鍚﹀湪杩愯
-	 * @return 杩愯鐘舵��
-	 */
-	public static boolean isPolling() {
-		return isRunning;
-	}
+    /**
+     * 妫�鏌ヨ疆璇㈢嚎绋嬫槸鍚﹀湪杩愯
+     * @return 杩愯鐘舵��
+     */
+    public static boolean isPolling() {
+        return isRunning;
+    }
 
-	/**
-	 * 杞浠诲姟瀹炵幇
-	 */
-	private static class PollingTask implements Runnable {
-		@Override
-		public void run() {
-			while (isRunning && !Thread.currentThread().isInterrupted()) {
-				try {
-					// 杈撳嚭鎵�鏈夊崱妲界姸鎬�
-					printAllSlotsStatus();
+    /**
+     * 杞浠诲姟瀹炵幇
+     */
+    private static class PollingTask implements Runnable {
+        @Override
+        public void run() {
+            System.out.println("杞浠诲姟寮�濮嬫墽琛�");
+            
+            while (isRunning && !Thread.currentThread().isInterrupted()) {
+                try {
+                    // 杈撳嚭鎵�鏈夊崱妲界姸鎬�
+                    printAllSlotsStatus();
 
-					// 绛夊緟鎸囧畾闂撮殧
-					Thread.sleep(POLL_INTERVAL);
-				} catch (InterruptedException e) {
-					System.out.println("杞绾跨▼琚腑鏂�");
-					Thread.currentThread().interrupt();
-					break;
-				} catch (Exception e) {
-					System.err.println("杞杩囩▼涓彂鐢熼敊璇�: " + e.getMessage());
-					e.printStackTrace();
-				}
-			}
-			isRunning = false;
-		}
+                    // 浣跨敤鍔ㄦ�侀棿闅旓紝鏀寔杩愯鏃惰皟鏁�
+                    Thread.sleep(pollInterval);
+                    
+                } catch (InterruptedException e) {
+                    System.out.println("杞绾跨▼琚腑鏂紝姝e湪閫�鍑�...");
+                    Thread.currentThread().interrupt();
+                    break;
+                } catch (Exception e) {
+                    System.err.println("杞杩囩▼涓彂鐢熼敊璇�: " + e.getMessage());
+                    // 璁板綍寮傚父浣嗙户缁繍琛岋紝閬垮厤鍥犲崟娆″紓甯稿鑷存暣涓洃鎺у仠姝�
+                    e.printStackTrace();
+                    
+                    // 鍙戠敓寮傚父鏃剁煭鏆傜瓑寰呭悗鍐嶇户缁紝閬垮厤棰戠箒閿欒寰幆
+                    try {
+                        Thread.sleep(5000);
+                    } catch (InterruptedException ie) {
+                        Thread.currentThread().interrupt();
+                        break;
+                    }
+                }
+            }
+            
+            isRunning = false;
+//            System.out.println("杞浠诲姟鎵ц缁撴潫");
+        }
 
-		/**
-		 * 杈撳嚭鎵�鏈夊崱妲界姸鎬佷俊鎭�
-		 */
-		private void printAllSlotsStatus() {
-			Fkj[] slots = SlotManager.getSlotArray();
-			if (slots == null || slots.length == 0) {
-				return;
-			}
-			for (Fkj slot : slots) {
-				if (slot != null) {
-					//浣跨敤涓嬮潰鐨勬帹缁欐湇鍔″櫒鍗$殑鐘舵��
-					String kacaobianhao=safeGetValue(slot.getSlotNumber());
-					String kahao=safeGetValue(slot.getCardNumber());
-					String shifouyouka=formatHasCard(safeGetValue(slot.getHasCard()));
-					String kazhuangtai=formatWorkStatus(safeGetValue(slot.getWorkStatus()));
-					String kacaodianya=safeGetValue(slot.getVoltage());
-					String kacaodianliu=safeGetValue(slot.getCurrent());
-					String guzhangyuanyin=formatFault(safeGetValue(slot.getFault()));					
-				}
-			}
+        /**
+         * 杈撳嚭鎵�鏈夊崱妲界姸鎬佷俊鎭�
+         */
+        private void printAllSlotsStatus() {
+            Fkj[] slots = SlotManager.getSlotArray();
+            if (slots == null || slots.length == 0) {
+//                System.out.println("鏃犲崱妲芥暟鎹�");
+                return;
+            }
+            
+            // 浣跨敤StringBuilder鍑忓皯瀛楃涓叉嫾鎺ュ紑閿�
+            StringBuilder statusBuilder = new StringBuilder();
+            
+            
+            int validSlotCount = 0;
+            for (Fkj slot : slots) {
+                if (slot != null) {
+                    validSlotCount++;
+                    // 浣跨敤涓嬮潰鐨勬帹缁欐湇鍔″櫒鍗$殑鐘舵��
+                    String kacaobianhao = safeGetValue(slot.getSlotNumber());
+                    String kahao = safeGetValue(slot.getCardNumber());
+                    String shifouyouka = formatHasCard(safeGetValue(slot.getHasCard()));
+                    String kazhuangtai = formatWorkStatus(safeGetValue(slot.getWorkStatus()));
+                    String kacaodianya = safeGetValue(slot.getVoltage());
+                    String kacaodianliu = safeGetValue(slot.getCurrent());
+                    String guzhangyuanyin = formatFault(safeGetValue(slot.getFault()));
+                    
+                   
+                }
+            }            
 
-		}
+        }
 
-		/**
-		 * 瀹夊叏鑾峰彇鍊硷紝閬垮厤绌烘寚閽�
-		 */
-		private String safeGetValue(String value) {
-			return value != null ? value : "null";
-		}
+        /**
+         * 瀹夊叏鑾峰彇鍊硷紝閬垮厤绌烘寚閽�
+         */
+        private String safeGetValue(String value) {
+            return value != null ? value : NULL_VALUE;
+        }
 
-		/**
-		 * 鏍煎紡鍖栨湁鍗$姸鎬�
-		 */
-		private String formatHasCard(String hasCard) {
-			if ("1".equals(hasCard)) return "鏈夊崱";
-			if ("0".equals(hasCard)) return "鏃犲崱";
-			if ("-1".equals(hasCard)) return "鏈煡";
-			return hasCard;
-		}
+        /**
+         * 鏍煎紡鍖栨湁鍗$姸鎬�
+         */
+        private String formatHasCard(String hasCard) {
+            if ("1".equals(hasCard)) return "鏈夊崱";
+            if ("0".equals(hasCard)) return "鏃犲崱";
+            if ("-1".equals(hasCard)) return UNKNOWN;
+            return hasCard;
+        }
 
-		/**
-		 * 鏍煎紡鍖栧伐浣滅姸鎬�
-		 */
-		private String formatWorkStatus(String status) {
-			switch (status) {
-			case "0": return "鏃犳晥";
-			case "1": return "寰呮満";
-			case "2": return "鍏呯數涓�";
-			case "3": return "宸插厖婊�";
-			case "4": return "鏁呴殰";
-			case "5": return "鎺堟潈鍒版湡";
-			case "6": return "閫氫俊瓒呮椂";
-			case "-1": return "鏈煡";
-			default: return status;
-			}
-		}
+        /**
+         * 鏍煎紡鍖栧伐浣滅姸鎬�
+         */
+        private String formatWorkStatus(String status) {
+            switch (status) {
+                case STATUS_INVALID: return "鏃犳晥";
+                case STATUS_STANDBY: return "寰呮満";
+                case STATUS_CHARGING: return "鍏呯數涓�";
+                case STATUS_FULL: return "宸插厖婊�";
+                case STATUS_FAULT: return "鏁呴殰";
+                case STATUS_AUTH_EXPIRED: return "鎺堟潈鍒版湡";
+                case STATUS_TIMEOUT: return "閫氫俊瓒呮椂";
+                case STATUS_UNKNOWN: return UNKNOWN;
+                default: return status;
+            }
+        }
 
-		/**
-		 * 鏍煎紡鍖栨晠闅滅姸鎬�
-		 */
-		private String formatFault(String fault) {
-			switch (fault) {
-			case "0": return "姝e父";
-			case "1": return "鎻掑崱閿欒";
-			case "2": return "杩囨祦";
-			case "3": return "闂ㄦ帶鏁呴殰";
-			case "4": return "杩囧帇";
-			case "5": return "娆犲帇";
-			case "-1": return "鏈煡";
-			default: return fault;
-			}
-		}
-	}
+        /**
+         * 鏍煎紡鍖栨晠闅滅姸鎬�
+         */
+        private String formatFault(String fault) {
+            switch (fault) {
+                case FAULT_NORMAL: return NORMAL;
+                case FAULT_CARD_ERROR: return "鎻掑崱閿欒";
+                case FAULT_OVER_CURRENT: return "杩囨祦";
+                case FAULT_DOOR_FAULT: return "闂ㄦ帶鏁呴殰";
+                case FAULT_OVER_VOLTAGE: return "杩囧帇";
+                case FAULT_UNDER_VOLTAGE: return "娆犲帇";
+                case FAULT_UNKNOWN: return UNKNOWN;
+                default: return fault;
+            }
+        }
+    }
 
-	/**
-	 * 璁剧疆杞闂撮殧锛堝崟浣嶏細姣锛�
-	 * @param interval 闂撮殧鏃堕棿锛屾绉�
-	 */
-	public static void setPollInterval(int interval) {
-		// 娉ㄦ剰锛氳繖涓缃笉浼氱珛鍗崇敓鏁堬紝闇�瑕侀噸鍚疆璇㈢嚎绋�
-		System.out.println("鏂扮殑杞闂撮殧灏嗗湪涓嬫鍚姩鏃剁敓鏁�: " + interval + "ms");
-	}
+    /**
+     * 璁剧疆杞闂撮殧锛堝崟浣嶏細姣锛�
+     * @param interval 闂撮殧鏃堕棿锛屾绉�
+     */
+    public static void setPollInterval(int interval) {
+        if (interval <= 0) {
+            throw new IllegalArgumentException("杞闂撮殧蹇呴』澶т簬0");
+        }
+        pollInterval = interval;
+        System.out.println("杞闂撮殧宸叉洿鏂�: " + interval + "ms");
+    }
 
-	/**
-	 * 鑾峰彇褰撳墠杞闂撮殧
-	 * @return 杞闂撮殧锛堟绉掞級
-	 */
-	public static int getPollInterval() {
-		return POLL_INTERVAL;
-	}
+    /**
+     * 鑾峰彇褰撳墠杞闂撮殧
+     * @return 杞闂撮殧锛堟绉掞級
+     */
+    public static int getPollInterval() {
+        return pollInterval;
+    }
 
-	/**
-	 * 鎵嬪姩瑙﹀彂涓�娆$姸鎬佽緭鍑猴紙涓嶇瓑寰呴棿闅旓級
-	 */
-	public static void triggerManualOutput() {
-		if (isRunning) {
-			new PollingTask().printAllSlotsStatus();
-		} else {
-			System.out.println("杞绾跨▼鏈繍琛岋紝鏃犳硶鎵嬪姩瑙﹀彂杈撳嚭");
-		}
-	}
+    /**
+     * 鎵嬪姩瑙﹀彂涓�娆$姸鎬佽緭鍑猴紙涓嶇瓑寰呴棿闅旓級
+     */
+    public static void triggerManualOutput() {
+        if (isRunning && pollThread != null) {
+            new PollingTask().printAllSlotsStatus();
+        } else {
+            System.out.println("杞绾跨▼鏈繍琛岋紝鏃犳硶鎵嬪姩瑙﹀彂杈撳嚭");
+        }
+    }
+    
+    /**
+     * 瀹夊叏鍏抽棴鎵�鏈夎祫婧�
+     */
+    public static void shutdown() {
+        stopPolling();
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3