From 631d1684ca5ba17ac68ed1d98f30cee384fbb867 Mon Sep 17 00:00:00 2001
From: 上海郢昱 <15922366+miu-haiqing@user.noreply.gitee.com>
Date: 星期三, 16 九月 2026 11:00:56 +0800
Subject: [PATCH] 运行新增托盘图标,新增查看串口状态、关闭串口监听、推出的右键菜单

---
 src/main/java/com/hwtd/mes/collect/DataAcquisitionApplication.java |   55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 54 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/hwtd/mes/collect/DataAcquisitionApplication.java b/src/main/java/com/hwtd/mes/collect/DataAcquisitionApplication.java
index 362e762..6ea359b 100644
--- a/src/main/java/com/hwtd/mes/collect/DataAcquisitionApplication.java
+++ b/src/main/java/com/hwtd/mes/collect/DataAcquisitionApplication.java
@@ -1,13 +1,66 @@
 package com.hwtd.mes.collect;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
+import javax.swing.JOptionPane;
+import java.net.BindException;
+
+@Slf4j
 @SpringBootApplication
 public class DataAcquisitionApplication {
 
     public static void main(String[] args) {
-        SpringApplication.run(DataAcquisitionApplication.class, args);
+        SpringApplication application = new SpringApplication(DataAcquisitionApplication.class);
+        // 绯荤粺鎵樼洏鍥炬爣渚濊禆 AWT锛歋pring Boot 榛樿 java.awt.headless=true锛岃繖閲屽繀椤诲叧鎺夛紝鍚﹀垯鎵樼洏涓嶄細鏄剧ず
+        application.setHeadless(false);
+        try {
+            application.run(args);
+        } catch (Throwable e) {
+            // 鍙屽嚮 jar 鍚姩鐢ㄧ殑鏄� javaw锛屾病鏈夋帶鍒跺彴锛屽惎鍔ㄥけ璐ユ椂蹇呴』寮圭獥锛屽惁鍒欑敤鎴蜂粈涔堥兘鐪嬩笉鍒�
+            showStartupError(e);
+            System.exit(1);
+        }
     }
 
+    /**
+     * 鍚姩澶辫触鎻愮ず锛氬啓鏃ュ織 + 寮圭獥
+     */
+    private static void showStartupError(Throwable error) {
+        String message = buildStartupErrorMessage(error);
+        try {
+            log.error("鏁版嵁閲囬泦鍣ㄥ惎鍔ㄥけ璐ワ細{}", message, error);
+        } catch (Throwable ignored) {
+            // 鏃ュ織绯荤粺杩樻病鍒濆鍖栧ソ鏃跺拷鐣�
+        }
+        try {
+            JOptionPane.showMessageDialog(null, message, "鏁版嵁閲囬泦鍣ㄥ惎鍔ㄥけ璐�", JOptionPane.ERROR_MESSAGE);
+        } catch (Throwable t) {
+            // 娌℃湁妗岄潰浼氳瘽鏃跺脊涓嶄簡绐楋紝鍙兘闈犳棩蹇�
+            System.err.println(message);
+        }
+    }
+
+    /**
+     * 缁勮鍚姩澶辫触鎻愮ず锛氱鍙h鍗犵敤鏃剁粰鍑烘洿鏄庣‘鐨勫鐞嗗姙娉�
+     *
+     * @param error 鍚姩寮傚父
+     * @return 鎻愮ず鍐呭
+     */
+    public static String buildStartupErrorMessage(Throwable error) {
+        Throwable root = error;
+        while (root.getCause() != null && root.getCause() != root) {
+            root = root.getCause();
+        }
+        String detail = root.getMessage() == null ? root.getClass().getName() : root.getMessage();
+        if (root instanceof BindException
+                || detail.contains("already in use")
+                || detail.contains("Address already in use")) {
+            return "鏈嶅姟绔彛宸茶鍗犵敤锛岀▼搴忓彲鑳藉凡缁忓湪杩愯銆俓n"
+                    + "璇峰厛鐪嬩换鍔℃爮鍙充笅瑙掓湁娌℃湁閲囬泦鍣ㄥ浘鏍囷紙鍙抽敭 鈫� 閫�鍑猴級锛�"
+                    + "鎴栧湪浠诲姟绠$悊鍣ㄩ噷缁撴潫瀵瑰簲鐨� java 杩涚▼鍚庡啀鍚姩銆�";
+        }
+        return "鍚姩澶辫触锛�" + detail + "\n璇︾粏閿欒璇锋煡鐪嬫棩蹇楁枃浠躲��";
+    }
 }

--
Gitblit v1.9.3