package jiekou; import chushihua.SlotManager; import xitongshezhi.Fkj; /** * 轮询卡槽状态类 * 用于定期轮询并输出所有卡槽的状态信息 */ public class lunxunkazhuangtai { private static Thread pollThread; private static volatile boolean isRunning = false; private static final int POLL_INTERVAL = 30000; // 30秒间隔 /** * 启动轮询线程 */ public static void startPolling() { if (isRunning) {; return; } isRunning = true; pollThread = new Thread(new PollingTask(), "SlotStatusPollingThread"); pollThread.setDaemon(true); // 设置为守护线程,当主线程结束时自动结束 pollThread.start(); } /** * 停止轮询线程 */ public static void stopPolling() { isRunning = false; if (pollThread != null) { pollThread.interrupt(); pollThread = null; } System.out.println("卡槽状态轮询线程已停止"); } /** * 检查轮询线程是否在运行 * @return 运行状态 */ public static boolean isPolling() { return isRunning; } /** * 轮询任务实现 */ private static class PollingTask implements Runnable { @Override public void run() { while (isRunning && !Thread.currentThread().isInterrupted()) { try { // 输出所有卡槽状态 printAllSlotsStatus(); // 等待指定间隔 Thread.sleep(POLL_INTERVAL); } catch (InterruptedException e) { System.out.println("轮询线程被中断"); Thread.currentThread().interrupt(); break; } catch (Exception e) { System.err.println("轮询过程中发生错误: " + e.getMessage()); e.printStackTrace(); } } isRunning = false; } /** * 输出所有卡槽状态信息 */ private void printAllSlotsStatus() { Fkj[] slots = SlotManager.getSlotArray(); if (slots == null || slots.length == 0) { return; } for (Fkj slot : slots) { if (slot != null) { //使用下面的推给服务器卡的状态 String kacaobianhao=safeGetValue(slot.getSlotNumber()); String kahao=safeGetValue(slot.getCardNumber()); String shifouyouka=formatHasCard(safeGetValue(slot.getHasCard())); String kazhuangtai=formatWorkStatus(safeGetValue(slot.getWorkStatus())); String kacaodianya=safeGetValue(slot.getVoltage()); String kacaodianliu=safeGetValue(slot.getCurrent()); String guzhangyuanyin=formatFault(safeGetValue(slot.getFault())); } } } /** * 安全获取值,避免空指针 */ private String safeGetValue(String value) { return value != null ? value : "null"; } /** * 格式化有卡状态 */ private String formatHasCard(String hasCard) { if ("1".equals(hasCard)) return "有卡"; if ("0".equals(hasCard)) return "无卡"; if ("-1".equals(hasCard)) return "未知"; return hasCard; } /** * 格式化工作状态 */ private String formatWorkStatus(String status) { switch (status) { case "0": return "无效"; case "1": return "待机"; case "2": return "充电中"; case "3": return "已充满"; case "4": return "故障"; case "5": return "授权到期"; case "6": return "通信超时"; case "-1": return "未知"; default: return status; } } /** * 格式化故障状态 */ private String formatFault(String fault) { switch (fault) { case "0": return "正常"; case "1": return "插卡错误"; case "2": return "过流"; case "3": return "门控故障"; case "4": return "过压"; case "5": return "欠压"; case "-1": return "未知"; default: return fault; } } } /** * 设置轮询间隔(单位:毫秒) * @param interval 间隔时间,毫秒 */ public static void setPollInterval(int interval) { // 注意:这个设置不会立即生效,需要重启轮询线程 System.out.println("新的轮询间隔将在下次启动时生效: " + interval + "ms"); } /** * 获取当前轮询间隔 * @return 轮询间隔(毫秒) */ public static int getPollInterval() { return POLL_INTERVAL; } /** * 手动触发一次状态输出(不等待间隔) */ public static void triggerManualOutput() { if (isRunning) { new PollingTask().printAllSlotsStatus(); } else { System.out.println("轮询线程未运行,无法手动触发输出"); } } }