From 0f1509097818fbf48d7741d0fe0d9b973e88730d Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期六, 22 十一月 2025 17:46:43 +0800
Subject: [PATCH] 新增人脸检测暂停有卡卡槽查询
---
src/home/Homein.java | 132 ++++++++++++++++++++++++++++++-------------
1 files changed, 91 insertions(+), 41 deletions(-)
diff --git a/src/home/Homein.java b/src/home/Homein.java
index 2ab0538..26f2139 100644
--- a/src/home/Homein.java
+++ b/src/home/Homein.java
@@ -1,5 +1,4 @@
package home;
-
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
@@ -7,11 +6,25 @@
import chushihua.Chushihua;
import chushihua.SlotManager;
import chushihua.lunxun;
-import chushihua.lunxunzaixian;
+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 {
// 璁剧疆绯荤粺澶栬
@@ -29,6 +42,7 @@
"绯荤粺鍒濆鍖栧け璐ワ紝鏃犳硶鍚姩搴旂敤绋嬪簭",
"閿欒",
JOptionPane.ERROR_MESSAGE);
+ cleanupSingleInstanceLock();
System.exit(1);
}
@@ -38,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());
+ }
}
/**
@@ -49,23 +104,23 @@
*/
private static boolean initializeSystem() {
try {
- System.out.println("寮�濮嬬郴缁熷垵濮嬪寲娴佺▼...");
+ //System.out.println("寮�濮嬬郴缁熷垵濮嬪寲娴佺▼...");
// 1. 杩愯绯荤粺鍒濆鍖栫被 Chushihua
- System.out.println("姝ラ1: 鍒濆鍖栫郴缁熼厤缃�...");
+ //System.out.println("姝ラ1: 鍒濆鍖栫郴缁熼厤缃�...");
if (!initializeChushihua()) {
System.err.println("绯荤粺閰嶇疆鍒濆鍖栧け璐�");
return false;
}
// 2. 鍒濆鍖� SlotManager 绫�
- System.out.println("姝ラ2: 鍒濆鍖栧崱妲界鐞嗗櫒...");
+ //System.out.println("姝ラ2: 鍒濆鍖栧崱妲界鐞嗗櫒...");
if (!initializeSlotManager()) {
System.err.println("鍗℃Ы绠$悊鍣ㄥ垵濮嬪寲澶辫触");
return false;
}
- System.out.println("绯荤粺鍒濆鍖栧畬鎴�");
+ //System.out.println("绯荤粺鍒濆鍖栧畬鎴�");
return true;
} catch (Exception e) {
@@ -84,11 +139,11 @@
boolean success = configSystem.initialize();
if (success) {
- System.out.println("鉁� 绯荤粺閰嶇疆鍒濆鍖栨垚鍔�");
- System.out.println(" 璁惧缂栧彿: " + configSystem.getMachineConfig().getMachineId());
- System.out.println(" 鍗℃Ы鎬绘暟: " + configSystem.getMachineConfig().getTotalSlots());
- System.out.println(" 杞闂撮殧: " + configSystem.getMachineConfig().getPollingInterval() + "ms");
- System.out.println(" 娉㈢壒鐜�: " + configSystem.getMachineConfig().getBaudrate());
+ //System.out.println("鉁� 绯荤粺閰嶇疆鍒濆鍖栨垚鍔�");
+ //System.out.println(" 璁惧缂栧彿: " + configSystem.getMachineConfig().getMachineId());
+ //System.out.println(" 鍗℃Ы鎬绘暟: " + configSystem.getMachineConfig().getTotalSlots());
+ //System.out.println(" 杞闂撮殧: " + configSystem.getMachineConfig().getPollingInterval() + "ms");
+ //System.out.println(" 娉㈢壒鐜�: " + configSystem.getMachineConfig().getBaudrate());
} else {
System.err.println("鉁� 绯荤粺閰嶇疆鍒濆鍖栧け璐�");
}
@@ -107,9 +162,9 @@
private static boolean initializeSlotManager() {
try {
// SlotManager 浼氬湪鏋勯�犲嚱鏁颁腑鑷姩鍒濆鍖栨墍鏈夊崱妲�
- SlotManager slotManager = new SlotManager();
- System.out.println("鉁� 鍗℃Ы绠$悊鍣ㄥ垵濮嬪寲鎴愬姛");
- System.out.println(" 鎬诲崱妲芥暟: " + slotManager.getTotalSlots());
+ new SlotManager();
+ //System.out.println("鉁� 鍗℃Ы绠$悊鍣ㄥ垵濮嬪寲鎴愬姛");
+ //System.out.println(" 鎬诲崱妲芥暟: " + slotManager.getTotalSlots());
return true;
@@ -129,24 +184,15 @@
if (serialConnected) {
// 4. 涓插彛杩炴帴鎴愬姛鍚庯紝鍚姩杞
- boolean pollingStarted = startPollingService();
+ startPollingService();
+ showMainInterface();
+ lunxunkazhuangtai.startPolling();//鍚姩鍗$姸鎬佽疆璇㈠彂缁欐湇鍔″櫒
- if (pollingStarted) {
- showMainInterface();
- //鍚姩杞鍗$姸鎬佺粰鏈嶅姟鍣ㄥ彂鏁版嵁
- lunxunkazhuangtai.startPolling();
- //鍚姩鍦ㄧ嚎鐨勫崱鐘舵�佽疆璇�
- lunxunzaixian.startOnlinePolling();
- } else {
- System.err.println("杞鏈嶅姟鍚姩澶辫触");
- JOptionPane.showMessageDialog(null,
- "杞鏈嶅姟鍚姩澶辫触锛屽簲鐢ㄧ▼搴忔棤娉曟甯歌繍琛�",
- "璀﹀憡",
- JOptionPane.WARNING_MESSAGE);
- }
+
} else {
System.err.println("涓插彛杩炴帴澶辫触");
// 涓插彛杩炴帴澶辫触宸茬粡鐢盨erialPortConnectionDialog澶勭悊锛岀洿鎺ラ��鍑�
+ cleanupSingleInstanceLock();
System.exit(0);
}
@@ -157,6 +203,7 @@
"搴旂敤绋嬪簭鍚姩杩囩▼涓彂鐢熼敊璇�: " + e.getMessage(),
"閿欒",
JOptionPane.ERROR_MESSAGE);
+ cleanupSingleInstanceLock();
System.exit(1);
}
}
@@ -166,17 +213,17 @@
*/
private static boolean initializeSerialPort() {
try {
- System.out.println("姝e湪鎵撳紑涓插彛杩炴帴瀵硅瘽妗�...");
+ //System.out.println("姝e湪鎵撳紑涓插彛杩炴帴瀵硅瘽妗�...");
// 鏄剧ず涓插彛杩炴帴瀵硅瘽妗嗭紙妯℃�佸璇濇锛屼細闃诲鐩村埌鐢ㄦ埛鎿嶄綔锛�
// 鐢ㄦ埛蹇呴』鐐瑰嚮"杩炴帴涓插彛"鎸夐挳鎵嶄細瀹為檯杩炴帴
boolean connected = SerialPortConnectionDialog.showConnectionDialog(null);
if (connected) {
- System.out.println("鉁� 涓插彛杩炴帴鎴愬姛");
+ //System.out.println("鉁� 涓插彛杩炴帴鎴愬姛");
return true;
} else {
- System.out.println("鉁� 涓插彛杩炴帴澶辫触鎴栫敤鎴峰彇娑�");
+ //System.out.println("鉁� 涓插彛杩炴帴澶辫触鎴栫敤鎴峰彇娑�");
// 娣诲姞璇︾粏閿欒淇℃伅
JOptionPane.showMessageDialog(null,
"涓插彛杩炴帴澶辫触锛岃妫�鏌ヤ覆鍙h澶囨槸鍚﹀彲鐢�",
@@ -211,7 +258,7 @@
boolean started = lunxun.startPolling();
if (started) {
- System.out.println("鉁� 杞鏌ヨ鍚姩鎴愬姛");
+ //System.out.println("鉁� 杞鏌ヨ鍚姩鎴愬姛");
return true;
} else {
System.err.println("鉁� 杞鏌ヨ鍚姩澶辫触");
@@ -229,11 +276,11 @@
*/
private static void showMainInterface() {
try {
- System.out.println("姝e湪鍒涘缓涓荤晫闈�...");
+ //System.out.println("姝e湪鍒涘缓涓荤晫闈�...");
// 纭繚杞鏈嶅姟宸插惎鍔�
if (!lunxun.isPolling()) {
- System.out.println("鍚姩杞鏈嶅姟...");
+ //System.out.println("鍚姩杞鏈嶅姟...");
startPollingService();
}
@@ -241,8 +288,8 @@
CardMachineUI mainUI = new CardMachineUI();
mainUI.setVisible(true);
- System.out.println("鉁� 涓荤晫闈㈠惎鍔ㄦ垚鍔�");
- System.out.println("搴旂敤绋嬪簭鍚姩瀹屾垚锛岃繘鍏ユ甯歌繍琛岀姸鎬�");
+ //System.out.println("鉁� 涓荤晫闈㈠惎鍔ㄦ垚鍔�");
+ //System.out.println("搴旂敤绋嬪簭鍚姩瀹屾垚锛岃繘鍏ユ甯歌繍琛岀姸鎬�");
// 娣诲姞鍏抽棴閽╁瓙锛岀‘淇濆簲鐢ㄧ▼搴忛��鍑烘椂姝g‘娓呯悊璧勬簮
addShutdownHook(mainUI);
@@ -263,26 +310,29 @@
*/
private static void addShutdownHook(CardMachineUI mainUI) {
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- System.out.println("搴旂敤绋嬪簭姝e湪鍏抽棴锛屾墽琛屾竻鐞嗘搷浣�...");
+ //System.out.println("搴旂敤绋嬪簭姝e湪鍏抽棴锛屾墽琛屾竻鐞嗘搷浣�...");
try {
// 鍋滄杞鏌ヨ
if (lunxun.isPolling()) {
- System.out.println("鍋滄杞鏌ヨ...");
+ //System.out.println("鍋滄杞鏌ヨ...");
lunxun.stopPolling();
}
// 鍏抽棴绯荤粺閰嶇疆
- System.out.println("鍏抽棴绯荤粺閰嶇疆...");
+ //System.out.println("鍏抽棴绯荤粺閰嶇疆...");
Chushihua.getInstance().shutdown();
// 鍏抽棴涓荤晫闈㈣祫婧�
if (mainUI != null) {
- System.out.println("鍏抽棴涓荤晫闈㈣祫婧�...");
+ //System.out.println("鍏抽棴涓荤晫闈㈣祫婧�...");
mainUI.dispose();
}
- System.out.println("搴旂敤绋嬪簭鍏抽棴瀹屾垚");
+ // 娓呯悊鍗曞疄渚嬮攣 - 纭繚鍦ㄥ叧闂挬瀛愪腑涔熻皟鐢�
+ cleanupSingleInstanceLock();
+
+ //System.out.println("搴旂敤绋嬪簭鍏抽棴瀹屾垚");
} catch (Exception e) {
System.err.println("搴旂敤绋嬪簭鍏抽棴杩囩▼涓彂鐢熷紓甯�: " + e.getMessage());
--
Gitblit v1.9.3