Java 在线编译器上线:和 C 版共用一套沙箱思路

番星

之前写过一个 番星 C 语言编辑器,用起来还行。这学期要教 Java,干脆照着同一个思路做了第二个版本。

地址:java.xingbox.me

和 C 版有什么不一样

前端几乎一样:CodeMirror 编辑器、深色布局、移动端适配、语法高亮和括号补全,编辑器 CDN 拉不到时回退成纯文本框。

差别在编译环节:

C 版Java 版
编译器GCC 9.2.0(Judge0 ID 50)Java 17(ID 91)/ Java 13(ID 62)
文件名main.cMain.java
入口main 函数public class Main + main(String[] args)
存储键fanxing_c_compiler_v1fanxing_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 进行许可。
目录
Java 在线编译器上线:和 C 版共用一套沙箱思路