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

---
 src/home/CardMachineUI.java |   98 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 69 insertions(+), 29 deletions(-)

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);
 	}
 	
 	/**

--
Gitblit v1.9.3