Java 在线编译器上线:和 C 版共用一套沙箱思路
之前写过一个 番星 C 语言编辑器,用起来还行。这学期要教 Java,干脆照着同一个思路做了第二个版本。
和 C 版有什么不一样
前端几乎一样:CodeMirror 编辑器、深色布局、移动端适配、语法高亮和括号补全,编辑器 CDN 拉不到时回退成纯文本框。
差别在编译环节:
| C 版 | Java 版 | |
|---|---|---|
| 编译器 | GCC 9.2.0(Judge0 ID 50) | Java 17(ID 91)/ Java 13(ID 62) |
| 文件名 | main.c | Main.java |
| 入口 | main 函数 | public class Main + main(String[] args) |
| 存储键 | fanxing_c_compiler_v1 | fanxing_java_compiler_v1 |
存储键是刻意分开的。两个编译器都在同一个域名下,共用 localStorage 的话会互相覆盖,所以各自独立,互不读取。
为什么用 Judge0
因为自己搭编译沙箱太麻烦,而且不安全。
用户提交的代码是有可能带死循环、fork 炸弹、读文件这些操作的。要自己隔离,得上 Docker、上 cgroup、上 seccomp,一套下来比写编辑器本身重得多。Judge0 已经把这些做完了,我这边只需要把源码和标准输入 POST 过去,拿回 stdout、stderr、编译错误、运行时间和内存占用。
代价是依赖第三方服务,Judge0 挂了就编不了。但对教学场景来说可以接受。
几个细节
只支持单文件。不解析 Maven/Gradle,不带外部依赖,不能声明 package。这是刻意限制:用途是让学生试一段单文件程序,不是替代 IDE。
快捷键。Ctrl/⌘ + Enter 运行,Ctrl/⌘ + S 下载原文。
示例内置。Hello World、中文输出、标准输入求和、数组排序四个示例,先跑通再改,比对着空白页发呆强。
清空要确认。改到一半手滑点清空太伤了,所以清空和重置都加了确认。
部署
和 C 版一样部署在 EdgeOne Pages,编译请求走边缘函数转发到 Judge0。本机和 EdgeOne 都不执行用户代码,只做转发。
源码:github.com/fanxing724/java-online-compiler
后面可能再加 Python 版本,反正前端的壳是现成的,换一套编译参数就行。
- 标题: Java 在线编译器上线:和 C 版共用一套沙箱思路
- 作者: 番星
- 创建于 : 2026-10-20 20:00:00
- 更新于 : 2026-10-21 20:11:26
- 链接: https://xingbox.me/java-online-compiler/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。