package home; import PublicPannel.BaseParameterPanel; import PublicPannel.BaseStationPanel; import PublicPannel.TagPanel; import PublicPannel.AntiCollisionPanel; import PublicPannel.UpgradePanel; import jiexi.DellTag55AA03; import java.util.Locale; import java.util.ResourceBundle; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.PropertyResourceBundle; /** * 面板字段更新工具类 - 统一管理各个面板的字段更新逻辑 */ public class PanelFieldUpdater { /** * 获取资源包 */ private static ResourceBundle getResourceBundle() { try { // 尝试从MainFrame获取当前语言设置 Locale locale = Locale.SIMPLIFIED_CHINESE; // 默认中文 // 尝试检测当前语言 String fileName = locale.equals(Locale.ENGLISH) ? "Messages_en.properties" : "Messages_zh.properties"; File langFile = new File("systemfile/" + fileName); if (langFile.exists()) { try (InputStream inputStream = new FileInputStream(langFile)) { return new PropertyResourceBundle(inputStream); } } } catch (Exception e) { // 如果加载失败,使用默认中文 } // 返回空ResourceBundle,将使用默认中文字符串 return null; } /** * 获取国际化字符串 */ private static String getString(String key) { ResourceBundle bundle = getResourceBundle(); if (bundle != null) { try { return bundle.getString(key); } catch (Exception e) { // 如果找不到键,返回默认值 } } // 默认中文值 switch (key) { case "panel.not.initialized": return "面板未正确初始化"; case "save.parameters.failed": return "保存参数失败"; case "field.cannot.empty": return "{0}不能为空"; case "parameter.error": return "参数错误"; default: return key; } } /** * 更新所有面板的字段 */ public static void updateAllPanels(DellTag55AA03.ParseResult result, BaseParameterPanel baseParamPanel, BaseStationPanel baseStationPanel, TagPanel tagPanel, AntiCollisionPanel antiCollisionPanel, UpgradePanel upgradePanel) { if (result == null) { return; } // 更新基础参数面板 updateBaseParameterPanel(result, baseParamPanel); // 更新基站面板 updateBaseStationPanel(result, baseStationPanel); // 更新标签面板 updateTagPanel(result, tagPanel); // 更新防碰撞面板 updateAntiCollisionPanel(result, antiCollisionPanel); // 更新升级面板 updateUpgradePanel(result, upgradePanel); } public static void updateAllPanels2(DellTag55AA03.ParseResult result, AntiCollisionPanel antiCollisionPanel) { if (result == null) { return; } //更新防撞面板继电器 updateAntiCollisionPanel2(result,antiCollisionPanel); } /** * 更新基础参数面板字段 */ private static void updateBaseParameterPanel(DellTag55AA03.ParseResult result, BaseParameterPanel panel) { if (panel == null) { return; } try { panel.updateFields(result); } catch (Exception e) { System.err.println("PanelFieldUpdater: 更新基础参数面板失败: " + e.getMessage()); e.printStackTrace(); } } /** * 更新基站面板字段 */ private static void updateBaseStationPanel(DellTag55AA03.ParseResult result, BaseStationPanel panel) { if (panel == null) { return; } try { panel.updateFields(result); } catch (Exception e) { System.err.println("PanelFieldUpdater: 更新基站面板失败: " + e.getMessage()); e.printStackTrace(); } } /** * 更新标签面板字段 */ private static void updateTagPanel(DellTag55AA03.ParseResult result, TagPanel panel) { if (panel == null) { System.out.println("PanelFieldUpdater: TagPanel is null"); return; } try { System.out.println("PanelFieldUpdater: Calling updateFields on TagPanel"); panel.updateFields(result); } catch (Exception e) { System.err.println("PanelFieldUpdater: 更新标签面板失败: " + e.getMessage()); e.printStackTrace(); } } /** * 更新防碰撞面板字段 */ private static void updateAntiCollisionPanel(DellTag55AA03.ParseResult result, AntiCollisionPanel panel) { if (panel == null) { return; } try { panel.updateFields(result); } catch (Exception e) { System.err.println("PanelFieldUpdater: 更新防碰撞面板失败: " + e.getMessage()); e.printStackTrace(); } } /** * 更新防碰撞继电器控制面板字段 */ private static void updateAntiCollisionPanel2(DellTag55AA03.ParseResult result, AntiCollisionPanel panel) { if (panel == null) { return; } try { panel.updateFields2(result); } catch (Exception e) { System.err.println("PanelFieldUpdater: 更新防碰撞面板失败: " + e.getMessage()); e.printStackTrace(); } } /** * 更新升级面板字段 */ private static void updateUpgradePanel(DellTag55AA03.ParseResult result, UpgradePanel panel) { if (panel == null) { return; } try { // 更新升级相关参数 if (result.dizhi0x2 != null) { // panel.setFirmwareVersion(result.dizhi0x2); } } catch (Exception e) { System.err.println("PanelFieldUpdater: 更新升级面板失败: " + e.getMessage()); } } /** * 从所有面板收集参数并构建配置数据 */ public static byte[] collectParametersToConfig(BaseParameterPanel baseParamPanel, BaseStationPanel baseStationPanel, TagPanel tagPanel, AntiCollisionPanel antiCollisionPanel, UpgradePanel upgradePanel) { try { // 检查面板是否初始化 if (baseParamPanel == null || baseStationPanel == null || tagPanel == null || antiCollisionPanel == null) { showErrorDialog(getString("panel.not.initialized")); return null; } // BaseParameterPanel 参数 String dizhi0x4 = safeCheckAndTrim(baseParamPanel.getdizhi0x4(), "模块编号", "0000"); String dizhi0x6 = safeCheckAndTrim(baseParamPanel.getdizhi0x6(), "通信频率", "0000"); String dizhi0x8 = safeCheckAndTrim(baseParamPanel.getdizhi0x8(), "最多通信基站", "0000"); String dizhi0xA = safeCheckAndTrim(baseParamPanel.getdizhi0xA(), "最少通信基站、小组编号", "0000"); String dizhi0xC = safeCheckAndTrim(baseParamPanel.getdizhi0xC(), "校准距离", "0000"); String dizhi0xE = safeCheckAndTrim(baseParamPanel.getdizhi0xE(), "模块类型", "0000"); String dizhi0x10 = safeCheckAndTrim(baseParamPanel.getdizhi0x10(), "基站主动测距", "0000"); String dizhi0x12 = safeCheckAndTrim(baseParamPanel.getdizhi0x12(), "报警设备", "0000"); String dizhi0x1A = safeCheckAndTrim(baseParamPanel.getdizhi0x1A(), "配对ID", "0000"); String dizhi0x1C = safeCheckAndTrim(baseParamPanel.getdizhi0x1C(), "心跳包、UWB开关状态", "0000"); String dizhi0x1E = safeCheckAndTrim(baseParamPanel.getdizhi0x1E(), "MODBUS模式", "0000"); String dizhi0x36 = safeCheckAndTrim(baseParamPanel.getdizhi0x36(), "功率", "0000"); // BaseStationPanel 参数 - 新增部分 String dizhi0x18 = safeCheckAndTrim(baseStationPanel.getdizhi0x18(), "外设控制", "0000"); String dizhi0x20 = safeCheckAndTrim(baseStationPanel.getdizhi0x20(), "临近基站数量", "0000"); String dizhi0x22 = safeCheckAndTrim(baseStationPanel.getdizhi0x22(), "临近基站1", "0000"); String dizhi0x24 = safeCheckAndTrim(baseStationPanel.getdizhi0x24(), "临近基站2", "0000"); String dizhi0x26 = safeCheckAndTrim(baseStationPanel.getdizhi0x26(), "临近基站3", "0000"); String dizhi0x28 = safeCheckAndTrim(baseStationPanel.getdizhi0x28(), "临近基站4", "0000"); String dizhi0x2A = safeCheckAndTrim(baseStationPanel.getdizhi0x2A(), "临近基站5", "0000"); String dizhi0x2C = safeCheckAndTrim(baseStationPanel.getdizhi0x2C(), "临近基站6", "0000"); String dizhi0x2E = safeCheckAndTrim(baseStationPanel.getdizhi0x2E(), "临近基站7", "0000"); String dizhi0x30 = safeCheckAndTrim(baseStationPanel.getdizhi0x30(), "临近基站8", "0000"); String dizhi0x32 = safeCheckAndTrim(baseStationPanel.getdizhi0x32(), "临近基站9", "0000"); String dizhi0x34 = safeCheckAndTrim(baseStationPanel.getdizhi0x34(), "临近基站10", "0000"); String dizhi0x44 = safeCheckAndTrim(baseStationPanel.getdizhi0x44(), "同步基站ID", "0000"); String dizhi0x46 = safeCheckAndTrim(baseStationPanel.getdizhi0x46(), "同步基站类型", "0000"); // TagPanel 参数 - 新增部分 String dizhi0x14 = safeCheckAndTrim(tagPanel.getdizhi0x14(), "IMU静止时间", "0000"); String dizhi0x1C_tag = safeCheckAndTrim(tagPanel.getdizhi0x1C(), "UWB开关状态", "0000"); String dizhi0x20_tag = safeCheckAndTrim(tagPanel.getdizhi0x20(), "振动时长", "0000"); String dizhi0x38 = safeCheckAndTrim(tagPanel.getdizhi0x38(), "加速度计阈值", "0000"); String dizhi0x3A = safeCheckAndTrim(tagPanel.getdizhi0x3A(), "空闲休眠时间", "0000"); String dizhi0x3C = safeCheckAndTrim(tagPanel.getdizhi0x3C(), "振动使能", "0000"); String dizhi0x3E = safeCheckAndTrim(tagPanel.getdizhi0x3E(), "加速度计使能", "0000"); String dizhi0x40 = safeCheckAndTrim(tagPanel.getdizhi0x40(), "标签配置状态", "0000"); String dizhi0x42 = safeCheckAndTrim(tagPanel.getdizhi0x42(), "加速度计时长", "0000"); String dizhi0x44_tag = safeCheckAndTrim(tagPanel.getdizhi0x44(), "设备激活状态", "0000"); String dizhi0x48 = safeCheckAndTrim(tagPanel.getdizhi0x48(), "速度滤波限值", "0000"); String dizhi0x50 = safeCheckAndTrim(tagPanel.getdizhi0x50(), "压力校准", "0000"); // AntiCollisionPanel 参数 - 新增部分 String dizhi0x14_anti = safeCheckAndTrim(antiCollisionPanel.getdizhi0x14(), "继电器1报警距离1", "0000"); String dizhi0x16 = safeCheckAndTrim(antiCollisionPanel.getdizhi0x16(), "继电器1报警距离2", "0000"); String dizhi0x18_anti = safeCheckAndTrim(antiCollisionPanel.getdizhi0x18(), "继电器1报警距离3", "0000"); String dizhi0x20_anti = safeCheckAndTrim(antiCollisionPanel.getdizhi0x20(), "Modbus地址", "0000"); String dizhi0x4A = safeCheckAndTrim(antiCollisionPanel.getdizhi0x4A(), "白名单起始", "0000"); String dizhi0x4C = safeCheckAndTrim(antiCollisionPanel.getdizhi0x4C(), "白名单结束", "0000"); String dizhi0x4E = antiCollisionPanel.getdizhi0x4E(); String dizhi0x50_anti = safeCheckAndTrim(antiCollisionPanel.getdizhi0x50(), "继电器持续时间", "0000"); String dizhi0x52 = safeCheckAndTrim(antiCollisionPanel.getdizhi0x52(), "测距输出格式", "0000"); String dizhi0x54 = safeCheckAndTrim(antiCollisionPanel.getdizhi0x54(), "天线电缆长度", "0000"); String dizhi0x56 = "0000"; String dizhi0x58 = safeCheckAndTrim(antiCollisionPanel.getdizhi0x58(), "馈线长度", "0000"); String dizhi0x5A = "0000"; String dizhi0x5C = "0000"; String dizhi0x5E = "0000"; String dizhi0xF0 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF0(), "继电器1控制", "0000"); String dizhi0xF2 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF2(), "继电器2控制", "0000"); String dizhi0xF4 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF4(), "继电器2报警距离1", "0000"); String dizhi0xF6 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF6(), "继电器2报警距离2", "0000"); String dizhi0xF8 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF8(), "继电器2报警距离3", "0000"); // ========== 新增:根据选项卡确定使用哪个字段值 ========== // 获取当前选中的选项卡类型当前选中的面板索引 (0-基站, 1-标签, 2-防撞, 3-升级) int selectedTab = 0; try { selectedTab = SerialCommunicationPanel.getCurrentSelectedPanelIndex(); // 确保索引在有效范围内 if (selectedTab < 0 || selectedTab > 3) { selectedTab = 0; System.err.println("选项卡索引超出范围,使用默认值: 0"); } } catch (Exception e) { selectedTab = 0; // 默认使用基站选项卡 System.err.println("获取选项卡索引失败,使用默认值: " + e.getMessage()); } System.out.println("当前选中的选项卡索引: " + selectedTab); // 根据选项卡确定使用哪个字段值 String finalDizhi0x1C; String finalDizhi0x20; String finalDizhi0x44; String finalDizhi0x14; String finalDizhi0x18; String finalDizhi0x50; if (selectedTab == 1) { // 标签选项卡选中时,使用标签面板的值 finalDizhi0x1C = dizhi0x1C_tag; finalDizhi0x20 = dizhi0x20_tag; finalDizhi0x44 = dizhi0x44_tag; finalDizhi0x14 = dizhi0x14; // 使用标签面板的0x14 finalDizhi0x18 = dizhi0x18; // 使用基站面板的0x18 finalDizhi0x50 = dizhi0x50; // 使用标签面板的0x50 System.out.println("使用标签面板的字段值"); } else if (selectedTab == 2) { // 防撞选项卡选中时,使用防撞面板的值 finalDizhi0x1C = dizhi0x1C; // 使用基础参数面板的0x1C finalDizhi0x20 = dizhi0x20_anti; finalDizhi0x44 = dizhi0x44; // 使用基站面板的0x44 finalDizhi0x14 = dizhi0x14_anti; finalDizhi0x18 = dizhi0x18_anti; finalDizhi0x50 = dizhi0x50_anti; System.out.println("使用防撞面板的字段值"); } else { // 默认情况(基础参数、基站等选项卡) finalDizhi0x1C = dizhi0x1C; // 使用基础参数面板的0x1C finalDizhi0x20 = dizhi0x20; // 使用基站面板的0x20 finalDizhi0x44 = dizhi0x44; // 使用基站面板的0x44 finalDizhi0x14 = dizhi0x14; // 使用标签面板的0x14 finalDizhi0x18 = dizhi0x18; // 使用基站面板的0x18 finalDizhi0x50 = dizhi0x50; // 使用标签面板的0x50 System.out.println("使用默认面板的字段值"); } // 安全转换整数,添加异常处理 int intdizhi0x6 = safeParseInt(dizhi0x6, 0); int intdizhi0x8 = safeParseInt(dizhi0x8, 0); int intdizhi0xA = safeParseInt(dizhi0xA, 0); int intdizhi0xC = safeParseInt(dizhi0xC, 0); int intdizhi0xE = safeParseInt(dizhi0xE, 0); int intdizhi0x10 = safeParseInt(dizhi0x10, 0); int intdizhi0x12 = safeParseInt(dizhi0x12, 0); int intdizhi0x14 = safeParseInt(finalDizhi0x14, 0); int intdizhi0x16 = safeParseInt(dizhi0x16, 0); int intdizhi0x18 = safeParseInt(finalDizhi0x18, 0); int intdizhi0x20 = safeParseInt(finalDizhi0x20, 0); int intdizhi0x36 = safeParseInt(dizhi0x36, 0); int intdizhi0x38 = safeParseInt(dizhi0x38, 0); int intdizhi0x3A = safeParseInt(dizhi0x3A, 0); int intdizhi0x42 = safeParseInt(dizhi0x42, 0); int intdizhi0x48 = safeParseInt(dizhi0x48, 0); int intdizhi0x50 = safeParseInt(finalDizhi0x50, 0); int intdizhi0x54 = safeParseInt(dizhi0x54, 0); int intdizhi0x58 = safeParseInt(dizhi0x58, 0); System.out.println("参数转换完成,开始设置配置数据..."); // 设置配置数据 DellTag55AA03.hexAA03.setDizhi0x4(getStringToHex(dizhi0x4)); // 设置设备ID DellTag55AA03.hexAA03.setDizhi0x6(getIntToHex(intdizhi0x6)); // 设置通信频率 DellTag55AA03.hexAA03.setDizhi0x8(getIntToHex(intdizhi0x8)); // 设置最大基站数 DellTag55AA03.hexAA03.setDizhi0xA(getIntToHex(intdizhi0xA)); // 设置最小基站数 DellTag55AA03.hexAA03.setDizhi0xC(getIntToHex(intdizhi0xC)); // 设置距离校准值 DellTag55AA03.hexAA03.setDizhi0xE(getIntToHex(intdizhi0xE)); // 设置设备类型 DellTag55AA03.hexAA03.setDizhi0x10(getIntToHex(intdizhi0x10)); // 设置基站主动测距 DellTag55AA03.hexAA03.setDizhi0x12(getIntToHex(intdizhi0x12)); // 设置报警设备 DellTag55AA03.hexAA03.setDizhi0x14(getIntToHex(intdizhi0x14)); // 设置IMU空闲时间或继电器1报警距离1 DellTag55AA03.hexAA03.setDizhi0x16(getStringToHex(dizhi0x16)); // 设置压力基站ID DellTag55AA03.hexAA03.setDizhi0x18(getIntToHex(intdizhi0x18)); // 设置外设控制或继电器1报警距离3 DellTag55AA03.hexAA03.setDizhi0x1A(getStringToHex(dizhi0x1A)); // 设置配对ID DellTag55AA03.hexAA03.setDizhi0x1C(getStringToHex(finalDizhi0x1C)); // 设置UWB开关状态 DellTag55AA03.hexAA03.setDizhi0x1E(getStringToHex(dizhi0x1E)); // 设置Modbus模式 DellTag55AA03.hexAA03.setDizhi0x20(getIntToHex(intdizhi0x20)); // 设置振动时长或Modbus地址 DellTag55AA03.hexAA03.setDizhi0x22(getStringToHex(dizhi0x22)); // 设置附近基站1ID DellTag55AA03.hexAA03.setDizhi0x24(getStringToHex(dizhi0x24)); // 设置附近基站2ID DellTag55AA03.hexAA03.setDizhi0x26(getStringToHex(dizhi0x26)); // 设置附近基站3ID DellTag55AA03.hexAA03.setDizhi0x28(getStringToHex(dizhi0x28)); // 设置附近基站4ID DellTag55AA03.hexAA03.setDizhi0x2A(getStringToHex(dizhi0x2A)); // 设置附近基站5ID DellTag55AA03.hexAA03.setDizhi0x2C(getStringToHex(dizhi0x2C)); // 设置附近基站6ID DellTag55AA03.hexAA03.setDizhi0x2E(getStringToHex(dizhi0x2E)); // 设置附近基站7ID DellTag55AA03.hexAA03.setDizhi0x30(getStringToHex(dizhi0x30)); // 设置附近基站8ID DellTag55AA03.hexAA03.setDizhi0x32(getStringToHex(dizhi0x32)); // 设置附近基站9ID DellTag55AA03.hexAA03.setDizhi0x34(getStringToHex(dizhi0x34)); // 设置附近基站10ID DellTag55AA03.hexAA03.setDizhi0x36(getIntToHex(intdizhi0x36)); // 设置功率 DellTag55AA03.hexAA03.setDizhi0x38(getIntToHex(intdizhi0x38)); // 设置加速度计阈值 DellTag55AA03.hexAA03.setDizhi0x3A(getIntToHex(intdizhi0x3A)); // 设置空闲休眠时间 DellTag55AA03.hexAA03.setDizhi0x3C(getStringToHex(dizhi0x3C)); // 设置振动使能 DellTag55AA03.hexAA03.setDizhi0x3E(getStringToHex(dizhi0x3E)); // 设置加速度计使能 DellTag55AA03.hexAA03.setDizhi0x40(getStringToHex(dizhi0x40)); // 设置标签配置状态 DellTag55AA03.hexAA03.setDizhi0x42(getIntToHex(intdizhi0x42)); // 设置加速度计时长 DellTag55AA03.hexAA03.setDizhi0x44(getStringToHex(finalDizhi0x44)); // 设置设备激活状态或同步基站ID DellTag55AA03.hexAA03.setDizhi0x46(getStringToHex(dizhi0x46)); // 设置同步基站类型 DellTag55AA03.hexAA03.setDizhi0x48(getIntToHex(intdizhi0x48)); // 设置速度滤波限制 DellTag55AA03.hexAA03.setDizhi0x4A(getStringToHex(dizhi0x4A));//白名单起始ID DellTag55AA03.hexAA03.setDizhi0x4C(getStringToHex(dizhi0x4C));//白名单终止ID DellTag55AA03.hexAA03.setDizhi0x4E(getStringToHex(dizhi0x4E));//白名单终止ID DellTag55AA03.hexAA03.setDizhi0x50(getIntToHex(intdizhi0x50)); // 设置压力高度校准或继电器持续时间 DellTag55AA03.hexAA03.setDizhi0x52(getStringToHex(dizhi0x52)); // DellTag55AA03.hexAA03.setDizhi0x54(getIntToHex(intdizhi0x54)); // DellTag55AA03.hexAA03.setDizhi0x56(getStringToHex(dizhi0x56)); // DellTag55AA03.hexAA03.setDizhi0x58(getIntToHex(intdizhi0x58)); // DellTag55AA03.hexAA03.setDizhi0x5A(getStringToHex(dizhi0x5A)); // DellTag55AA03.hexAA03.setDizhi0x5C(getStringToHex(dizhi0x5C)); // DellTag55AA03.hexAA03.setDizhi0x5E(getStringToHex(dizhi0x5E)); // byte[] peizhiinfo = DellTag55AA03.getpeizhihex(DellTag55AA03.hexAA03); System.out.println("配置数据生成完成,长度: " + (peizhiinfo != null ? peizhiinfo.length : 0)); // 临时使用示例配置数据 return peizhiinfo; } catch (Exception e) { System.err.println("收集参数配置时发生错误: " + e.getMessage()); e.printStackTrace(); showErrorDialog(getString("save.parameters.failed") + ": " + e.getMessage()); return null; } } /** * 收集继电器面板的参数构建配置数据 */ public static byte[] collectParametersToConfig2(AntiCollisionPanel antiCollisionPanel) { try { // 检查面板是否初始化 if (antiCollisionPanel == null ) { showErrorDialog("面板未正确初始化"); return null; } String dizhi0xF0="0000"; String dizhi0xF2="0000"; String dizhi0xF4="0000"; String dizhi0xF6="0000"; String dizhi0xF8="0000"; // ========== 新增:根据选项卡确定使用哪个字段值 ========== // 获取当前选中的选项卡类型当前选中的面板索引 (0-基站, 1-标签, 2-防撞, 3-升级) int selectedTab = 0; try { selectedTab = SerialCommunicationPanel.getCurrentSelectedPanelIndex(); // 确保索引在有效范围内 if (selectedTab < 0 || selectedTab > 3) { selectedTab = 0; System.err.println("选项卡索引超出范围,使用默认值: 0"); } } catch (Exception e) { selectedTab = 0; // 默认使用基站选项卡 System.err.println("获取选项卡索引失败,使用默认值: " + e.getMessage()); } System.out.println("当前选中的选项卡索引: " + selectedTab); if (selectedTab == 2) { dizhi0xF0= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF0(), "继电器1控制", "0000"); dizhi0xF2= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF2(), "继电器2控制", "0000"); dizhi0xF4= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF4(), "继电器2报警距离1", "0000"); dizhi0xF6= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF6(), "继电器2报警距离2", "0000"); dizhi0xF8= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF8(), "继电器2报警距离3", "0000"); System.out.println("使用防撞面板的字段值"); } else { return null; } // 安全转换整数,添加异常处理 int intdizhi0xF0= safeParseInt(dizhi0xF0, 0); int intdizhi0xF2= safeParseInt(dizhi0xF2, 0); int intdizhi0xF4= safeParseInt(dizhi0xF4, 0); int intdizhi0xF6= safeParseInt(dizhi0xF6, 0); int intdizhi0xF8= safeParseInt(dizhi0xF8, 0); System.out.println("参数转换完成,开始设置配置数据..."); // 设置配置数据 DellTag55AA03.hexAA03.setDizhi0xF0(getIntToHex(intdizhi0xF0)); // DellTag55AA03.hexAA03.setDizhi0xF2(getIntToHex(intdizhi0xF2)); // DellTag55AA03.hexAA03.setDizhi0xF4(getIntToHex(intdizhi0xF4)); // DellTag55AA03.hexAA03.setDizhi0xF6(getIntToHex(intdizhi0xF6)); // DellTag55AA03.hexAA03.setDizhi0xF8(getIntToHex(intdizhi0xF8)); // byte[] peizhiinfo = DellTag55AA03.getpeizhihex2(DellTag55AA03.hexAA03); System.out.println("配置数据生成完成,长度: " + (peizhiinfo != null ? peizhiinfo.length : 0)); // 临时使用示例配置数据 return peizhiinfo; } catch (Exception e) { System.err.println("收集参数配置时发生错误: " + e.getMessage()); e.printStackTrace(); showErrorDialog("保存参数失败: " + e.getMessage()); return null; } } /** * 安全的空值检查和trim处理,提供默认值 */ private static String safeCheckAndTrim(String value, String fieldName, String defaultValue) { if (value == null) { System.err.println(fieldName + " 为null,使用默认值: " + defaultValue); return defaultValue; } String trimmed = value.trim(); if (trimmed.isEmpty()) { System.err.println(fieldName + " 为空,使用默认值: " + defaultValue); return defaultValue; } return trimmed; } /** * 安全转换字符串为整数 */ private static int safeParseInt(String value, int defaultValue) { if (value == null || value.trim().isEmpty()) { return defaultValue; } try { return Integer.parseInt(value.trim()); } catch (NumberFormatException e) { try { return Integer.parseInt(value.trim(),16); } catch (NumberFormatException ex) { System.err.println("数字格式错误: " + value + ",使用默认值: " + defaultValue); return defaultValue; } } } public static String getIntToHex(int value) { byte[] buf =new byte[2]; buf[0] = intToRegisters(value)[3]; buf[1] = intToRegisters(value)[2]; String va=bytesToHex(buf); return va; } /**10进制转字节数组*/ public static byte[] intToRegisters(int v) { byte[] registers = new byte[4]; registers[0] = (byte) (0xff & (v >> 24)); registers[1] = (byte) (0xff & (v >> 16)); registers[2] = (byte) (0xff & (v >> 8)); registers[3] = (byte) (0xff & v); return registers; } public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02X", b)); // 去掉格式字符串中的空格 } return sb.toString(); // 此时已无需trim() } /** * 检查字符串是否为null或空,并去除空格 * @param value 要检查的字符串 * @param fieldName 字段名称(用于错误提示) * @return 处理后的字符串 */ private static String checkAndTrim(String value, String fieldName) { if (value == null) { showErrorDialog(getString("field.cannot.empty").replace("{0}", fieldName)); throw new IllegalArgumentException(fieldName + "不能为空"); } String trimmed = value.trim(); if (trimmed.isEmpty()) { showErrorDialog(getString("field.cannot.empty").replace("{0}", fieldName)); throw new IllegalArgumentException(fieldName + "不能为空"); } return trimmed; } /** * 显示错误弹窗 * @param message 错误信息 */ private static void showErrorDialog(String message) { // 使用Swing显示错误对话框 javax.swing.JOptionPane.showMessageDialog(null, message, getString("parameter.error"), javax.swing.JOptionPane.ERROR_MESSAGE); } /**获取设备编号*/ public static String getStringToHex(String tagid) { // 添加空值和长度检查 if (tagid == null || tagid.trim().isEmpty()) { System.err.println("警告: 参数 为空,使用默认值 0000"); return "0000"; } byte[] byteArray = toByteArray(tagid); // 检查转换后的字节数组长度 if (byteArray == null || byteArray.length == 0) { System.err.println("警告: 参数 '" + tagid + "' 转换后的字节数组为空,使用默认值 0000"); return "0000"; } // 处理长度不足的情况 byte[] buf = new byte[2]; if (byteArray.length >= 2) { // 正常情况:交换字节顺序 buf[0] = byteArray[1]; buf[1] = byteArray[0]; } else if (byteArray.length == 1) { // 只有一个字节的情况:高位补0 buf[0] = byteArray[0]; buf[1] = 0; } else { // 其他情况:全部补0 buf[0] = 0; buf[1] = 0; } String va = bytesToHex(buf); System.out.println("getStringToHex: 输入='" + tagid + "', 输出='" + va + "'"); return va; } /** * 16进制的字符串表示转成字节数组 * * @param hexString 16进制格式的字符串 * @return 转换后的字节数组 **/ public static byte[] toByteArray(String hexString) { // 添加更严格的输入验证 if (hexString == null || hexString.trim().isEmpty()) { System.err.println("警告: toByteArray 输入为空"); return new byte[0]; } String cleanedHex = hexString.replaceAll(" ", "").toUpperCase(); // 检查是否为有效的16进制字符串 if (!cleanedHex.matches("[0-9A-F]+")) { System.err.println("警告: '" + hexString + "' 不是有效的16进制字符串"); return new byte[0]; } // 确保长度为偶数(补齐前导0) if (cleanedHex.length() % 2 != 0) { cleanedHex = "0" + cleanedHex; System.out.println("警告: 补齐16进制字符串为偶数长度: " + cleanedHex); } int length = cleanedHex.length(); byte[] byteArray = new byte[length / 2]; try { for (int i = 0; i < length; i += 2) { String byteStr = cleanedHex.substring(i, i + 2); byteArray[i / 2] = (byte) Integer.parseInt(byteStr, 16); } } catch (Exception e) { System.err.println("toByteArray 转换错误: " + e.getMessage()); return new byte[0]; } return byteArray; } }