From 2b756769ea4adad21332d8a294871712cd42cc3f Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期三, 26 十一月 2025 13:57:24 +0800
Subject: [PATCH] 优化了轮询逻辑注意有打印输出
---
src/home/CardMachineUI.java | 122 ++++++++++++++++++++++++++++------------
1 files changed, 85 insertions(+), 37 deletions(-)
diff --git a/src/home/CardMachineUI.java b/src/home/CardMachineUI.java
index caa3f4a..831171c 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) {
@@ -174,7 +181,7 @@
}
private void initializeUI() {
- setTitle("鏅鸿兘浜鸿劯鍙戝崱鏈虹鐞嗙郴缁�");
+ setTitle("鍙戝崱鏈烘帶鍒惰蒋浠禫1.0");
setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
@@ -474,14 +481,22 @@
final int slotId = i;
SlotStatus status = getSlotStatusFromManager(slotId);
- // 娣诲姞璋冭瘯淇℃伅
+ // 鑾峰彇鍗℃Ы淇℃伅
Fkj slotInfo = slotManager.getSlotInfo(slotId);
- if (slotInfo != null) {
- } else {
- System.err.println("鍗℃Ы " + slotId + " - 鑾峰彇淇℃伅澶辫触");
+ String cardNumber = "鏃犲崱";
+ if (slotInfo != null && slotInfo.getCardNumber() != null) {
+ String cardNum = slotInfo.getCardNumber();
+ // 鍒ゆ柇鍗″彿鏄惁鏈夋晥锛堜笉鏄�"-1"鎴�"0000"锛�
+ if (!"-1".equals(cardNum) && !"0000".equals(cardNum)) {
+ cardNumber = cardNum;
+ }
}
- JButton slotButton = new JButton(String.valueOf(slotId));
+ // 鍒涘缓鍖呭惈鍗℃Ы缂栧彿鍜屽崱鍙风殑HTML鏂囨湰
+ String buttonText = String.format("<html><div style='text-align: center;'>%d<br/><span style='font-size: 10px;'>%s</span></div></html>",
+ slotId, cardNumber);
+
+ JButton slotButton = new JButton(buttonText);
slotButton.setBackground(status.getColor());
slotButton.setForeground(Color.WHITE);
slotButton.setFont(new Font("Microsoft YaHei", Font.BOLD, 14));
@@ -596,34 +611,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);
}
/**
@@ -661,10 +709,10 @@
public boolean performCardPickup(int slotId) {
try {
// 璋冪敤OpenDoor鐢熸垚寮�闂ㄦ寚浠�
- String command = OpenDoor.openOneDoor(slotId, OpenDoor.TYPE_ISSUE_CARD);
+// String command = OpenDoor.openOneDoor(slotId, OpenDoor.TYPE_ISSUE_CARD);
// 浣跨敤Sendmsg鍙戦�佹寚浠ゅ埌涓插彛
- boolean sendResult = Sendmsg.sendMessage(command);
+ boolean sendResult = Sendmsg.opendoorzhiling(slotId, 2);
if (sendResult) {
return true;
--
Gitblit v1.10.0