当前位置: 首页 > news >正文

Java + OSHI 实战:从零搭建企业级电脑硬件信息检测

作为一名信息处理员,想必都遇到过这类 “重复劳动” 的场景:

经理:“小白,把公司所有电脑的硬件信息统计一下,做个固定资产盘点表。”

如果手动去每台电脑上看「设备管理器」「系统信息」,不仅要反复操作相同步骤,还容易漏记、错记,几百台设备得耗上几天,效率低到离谱。

为了解决这个痛点,我调研了多款硬件信息采集方案,最终选择Java + OSHI技术栈,快速开发出一款可批量采集、导出的硬件信息检测工具,完美完成了固定资产盘点任务。

先上结果:

开发环境:java 1.8.0_462 +  OSHI 6.4.0 

开发工具:IntelliJ IDEA 2025.3.2

依赖环境:
<!-- OSHI 硬件信息依赖 --> <dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</artifactId> <version>6.4.0</version> </dependency>

关键代码块:

1、系统信息模块:

private JPanel createSystemInfoPanel() { JPanel panel = new JPanel(new BorderLayout()); String[] columnNames = {"属性", "值"}; DefaultTableModel model = new DefaultTableModel(columnNames, 0); // 系统基础信息 model.addRow(new Object[]{"操作系统家族", os.getFamily()}); model.addRow(new Object[]{"操作系统版本", os.getVersionInfo().getVersion()}); model.addRow(new Object[]{"系统架构", os.getBitness() + " 位"}); model.addRow(new Object[]{"当前登录用户", System.getProperty("user.name")}); // 手动将秒级时间戳转Date格式化,避免OSHI API兼容问题 model.addRow(new Object[]{ "系统启动时间", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(os.getSystemBootTime() * 1000L)) }); // 表格样式配置 JTable table = new JTable(model); table.setRowHeight(25); table.getColumnModel().getColumn(0).setPreferredWidth(150); table.getColumnModel().getColumn(1).setPreferredWidth(300); panel.add(new JScrollPane(table), BorderLayout.CENTER); return panel; }

2、CPU信息面板:

private JPanel createCpuInfoPanel() { JPanel panel = new JPanel(new BorderLayout()); String[] columnNames = {"属性", "值"}; DefaultTableModel model = new DefaultTableModel(columnNames, 0); CentralProcessor cpu = hal.getProcessor(); CentralProcessor.ProcessorIdentifier cpuId = cpu.getProcessorIdentifier(); // CPU基础信息 model.addRow(new Object[]{"CPU型号", cpuId.getName()}); model.addRow(new Object[]{"CPU厂商", cpuId.getVendor()}); model.addRow(new Object[]{"物理核心数", cpu.getPhysicalProcessorCount()}); model.addRow(new Object[]{"逻辑核心数", cpu.getLogicalProcessorCount()}); model.addRow(new Object[]{"最大频率", FormatUtil.formatHertz(cpu.getMaxFreq())}); model.addRow(new Object[]{"CPU缓存(L1/L2/L3)", "OSHI 6.4.0 暂不支持获取"}); // CPU负载 try { long[] prevTicks = cpu.getSystemCpuLoadTicks(); Thread.sleep(100); // 等待100ms采集负载数据 double load = cpu.getSystemCpuLoadBetweenTicks(prevTicks); model.addRow(new Object[]{"CPU负载(实时)", String.format("%.2f%%", load * 100)}); } catch (InterruptedException e) { model.addRow(new Object[]{"CPU负载(实时)", "获取失败"}); Thread.currentThread().interrupt(); } // 表格样式配置 JTable table = new JTable(model); table.setRowHeight(25); table.getColumnModel().getColumn(0).setPreferredWidth(150)
http://www.jsqmd.com/news/478807/

相关文章:

  • 本科论文30%红线 vs 硕士15%标准:不同学历降AI策略不同
  • 金舟软件AI对话工具-20260313提问VLAN技术
  • 全文 - Quantum error correction below the surface code threshold
  • AUS GLOBAL 荣膺“最受欢迎外汇经纪商”奖
  • 擎策·知海全球专利数据库 破解研发检索痛点 让创新更高效、更省心
  • 用Chrome Debug模式让AI助手接管浏览器,到底值不值?
  • 平行链协议深度拆解 | 一个区块如何穿越六道关卡获得最终确认
  • 26春二年级下语文课本,二下语文课本
  • 2026年 消防水池水位显示装置厂家排行榜发布,这些品牌值得信赖 - WHSENSORS
  • 浅拷贝与深拷贝核心区别及陷阱
  • Python 3.12 MagicMethods - 47 - __matmul__
  • 高粘度流体不用愁!LFT2730平膜压力变送器,精准又耐用
  • 07姜玉轩web前端开发技术课堂作业随笔
  • 告别传统测尺!电子水尺让水位监测更智能
  • 认识AGENTS.md
  • 目前openclaw、course编程、Cloude Code对前端编程的影响
  • OpenClaw真正“保姆级”的环境配置 + 使用教程
  • 立足康养实训,培养懂康养、善服务、强技能的实用人才
  • C陷阱---指针使用
  • 面试必背!7个高频Linux指令(附考点+避坑指南)
  • 一个弹窗页面多种table表格切换
  • 老王-真正的修行是玩不是练
  • (A100/RTX4090)GPU平台实操流程+技术向省钱技巧
  • Spring Boot相关的面试题
  • 数据分析智能体与报表生成
  • 三电平逆变器在三相不平衡电网中的仿真探索
  • MySQL慢查询优化实战教程:200万数据从3秒优化到50ms(EXPLAIN + 索引设计 + 延迟关联)
  • 《Unity3D/2D游戏开发从0到1(第三版)》书籍2026年已正式发行!
  • 探索改进灰狼优化算法(AEGWO):性能飞升的奥秘
  • 对比一圈后 8个AI论文平台测评:继续教育毕业论文写作必备工具推荐