CircuitJS1 Desktop Mod:离线电路仿真工具的技术探秘
核心架构解析
项目空间布局
CircuitJS1 Desktop Mod采用模块化分层架构,主要工作区包含5大功能模块:
📂 核心代码区 (src/main/java/com/lushprojects/circuitjs1/client)
存放电路元件实现类(如ResistorElm.java电阻元件、OpAmpElm.java运算放大器)和核心仿真引擎CirSim.java,采用GWT框架实现Java到JavaScript的跨平台转换。
💻 前端资源站 (war/)
包含网页入口文件circuitjs.html、样式表style.css和预编译电路示例(circuits/目录下的555定时器等18种经典电路模板),是应用运行时的"展示橱窗"。
🛠️ 构建工具箱 (scripts/)
提供开发辅助脚本,其中dev_n_build.js是项目构建的"交通枢纽",集成了从GWT编译到NW.js打包的全流程控制逻辑。
🔧 补丁管理区 (patches/)
存储17个功能改进补丁(如LDRElm.patch光敏电阻优化),采用差异文件格式记录对原始代码的定制化修改。
📦 输出缓冲区 (out/)
构建完成的可执行文件会自动输出到该目录,支持Windows(x32/x64)、Linux(x32/x64)和macOS(x64/arm64)多平台分发。
💡 新手友好提示
项目架构就像餐厅厨房:
src/是后厨(核心制作区),war/是用餐区(用户交互区),scripts/是传菜系统(流程控制)。理解这种分区有助于快速定位功能模块,比如要修改电阻元件特性,直接到src/client/ResistorElm.java即可。
关键入口探索
应用启动流程
CircuitJS1采用"双入口"设计,满足不同使用场景需求:
1. 桌面应用入口 🖥️
通过NW.js实现的桌面客户端启动路径:
npm start → scripts/dev_n_build.js → 启动NW.js运行时 → 加载war/circuitjs.html
关键文件解析:
package.json中的"start": "node scripts/dev_n_build.js --rungwt"定义启动命令war/circuitjs.html加载GWT编译后的仿真引擎circuitjs1.nocache.js- 自定义样式通过
<link rel="stylesheet" href="font/fontello.css">引入字体图标
2. 网页应用入口 🌐
纯浏览器运行模式通过Maven构建:
npm run buildgwt → Maven编译GWT项目 → 输出到target/site/ → 直接打开index.html
启动特征:
- 无需安装NW.js运行时,依赖浏览器内置JavaScript引擎
- 受浏览器安全策略限制,本地文件操作功能会受限
- 适合快速演示和轻量级电路设计
💡 新手友好提示
开发时推荐使用
npm run devmode启动开发模式,该模式会自动监控代码变化并热更新,就像用智能炒锅炒菜——火候(编译状态)会自动调节,无需反复启停炉灶。
配置逻辑解密
构建系统配置
项目采用Maven+Node.js双引擎驱动,关键配置文件形成"三层控制链":
1. Maven构建蓝图 (pom.xml)
核心配置项:
<groupId>com.lushprojects.circuitjs1</groupId> <!-- 项目身份标识 -->
<artifactId>circuitjs1mod</artifactId> <!-- 构件名称 -->
<version>1.3.2</version> <!-- 版本号 -->
<packaging>war</packaging> <!-- 打包类型为Web应用 -->
<!-- GWT编译插件配置 -->
<plugin>
<groupId>net.ltgt.gwt.maven</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.0-rc-9</version>
<configuration>
<moduleName>com.lushprojects.circuitjs1.circuitjs1</moduleName> <!-- 主模块入口 -->
<sourceLevel>1.8</sourceLevel> <!-- Java语言版本 -->
<compilerArgs>
<compilerArg>-style</compilerArg>
<compilerArg>OBFUSCATED</compilerArg> <!-- JS代码混淆压缩 -->
</compilerArgs>
</configuration>
</plugin>
2. Node脚本控制器 (package.json)
定义6个核心构建命令:
"scripts": {
"dev": "node scripts/dev_n_build.js", // 开发菜单
"buildgwt": "node scripts/dev_n_build.js --buildgwt", // 编译GWT
"build": "node scripts/dev_n_build.js --buildall", // 全平台构建
"full": "node scripts/dev_n_build.js --fullrebuild" // 完全重建
}
3. 多平台打包器 (scripts/dev_n_build.js)
该脚本实现"智能构建决策",关键逻辑包括:
- 自动检测缺失的NW.js运行时并从定制源下载
- 根据命令行参数选择构建目标平台(如
npm run build -- --win-x64仅构建Windows 64位版本) - 实现增量构建优化,已编译文件不会重复处理
常见问题排查
🔍 问题1:GWT编译失败
症状:执行npm run buildgwt时提示"Java版本不兼容"
解决:检查pom.xml中<sourceLevel>1.8</sourceLevel>配置,确保本地JDK版本≥1.8但<11(GWT 2.8.2不支持高版本Java)
🔍 问题2:NW.js下载超时
症状:构建时卡在"Downloading NW.js"步骤
解决:修改dev_n_build.js中的downloadUrl为国内镜像,或手动下载对应版本(如nwjs-v0.64.1-mod1-win-x64.zip)并放入out/nwjs_cache/目录
💡 新手友好提示
Maven配置就像奶茶配方:
<dependencies>是原料清单(依赖库),<plugins>是制作步骤(编译插件),<properties>是口味参数(编译选项)。修改版本号时要同步检查pom.xml和package.json,保持"配方"一致性。
项目演进史
该项目起源于Paul Falstad的Java Applet电路模拟器,2013年经Iain Sharp移植为Web应用,2020年SEVA77通过NW.js封装为桌面版,2023年升级支持Apple Silicon芯片。技术栈演进逻辑:Java→GWT→NW.js,始终遵循"保留核心功能+扩展平台支持"的迭代路线。
扩展学习路径
官方资源
- 核心文档:项目根目录
README.md提供完整构建指南,包含从环境搭建到多平台打包的详细步骤 - 示例电路库:
war/circuits/目录下的18个预设电路(如555monostable.txt单稳态电路)可作为实践素材
进阶技能树
- 掌握GWT框架基础,理解Java到JavaScript的转换原理
- 学习NW.js API,实现桌面特性(如文件系统访问、系统托盘)
- 研究电路仿真算法,从
CirSim.java的doStep()方法入手理解SPICE仿真核心逻辑
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0446
源启盛夏_AtomGit暑期开发者成长计划「源启盛夏」暑期校园开发者成长计划旨在激活校园开源力量,通过积分激励、认证扶持、资源倾斜等形式,引导高校组织和开发者完成「入驻 — 建项目 — 做贡献 — 获认证 — 得资源」的完整闭环。无论你是想带领社团入驻平台的组织者,还是希望用代码贡献证明自己的开发者,都能在这里找到属于你的成长路径。Markdown00
jiuwenswarmJiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0760
Hy3Hy3 是由腾讯混元团队研发的快慢思考融合的混合专家模型,总参数量 295B,激活参数 21B,MTP 层参数 3.8B。4 月底发布 Hy3 Preview 后,我们在 50 多个业务中获得了广泛的反馈,修复了各种体验问题,进一步提升了后训练的质量和规模。今天,我们发布 Hy3。它展现出显著强于同尺寸并比肩旗舰(参数规模往往是 Hy3 的 2~5 倍)开源模型的智能水平,显著提升了在各类产品和生产力任务中的实用价值。Python00
AscendNPU-IRAscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优C++0310
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
