Minexa说明书
排错故障排查

启动失败:卡住、闪退、迟迟不出 Done

按“环境→Java→核心→配置→端口→世界”的顺序排查;每种现象对应一张检查表和具体做法。

点了启动,然后呢?有的服几秒就退回“已停止”,有的卡在“正在启动”,有的显示运行中却始终没有出现 Done。看起来都是“启动失败”,但原因完全不在同一层,重装核心通常一种也治不好。

启动是一条链:应用先铺好运行环境,再找一个 Java,用它去跑核心里那个 jar,核心读配置、绑端口、加载世界,最后才打印 Done。任何一环断了,现象都像“开不起来”。

这一页按这条链的顺序,把六层拆开:环境 → Java → 核心 → 配置 → 端口 → 世界。你只要从最外层开始,一层层排除,卡在哪层就停在哪层修。

本页要点
  • 先给现象分类:没反应 / 秒退 / 卡住 / 没有 Done,四类的怀疑对象完全不同。

  • 启动成功的唯一标志是终端出现 Done,状态显示“运行中”不算。

  • 排查顺序固定:环境 → Java → 核心 → 配置 → 端口 → 世界,不要跳层。

  • 换核心不能解决 Java 问题,反而可能要求更高版本的 Java。

先分清四种“失败”#

同样是“起不来”,四类现象的下一步动作差别很大。先对照这张表给自己归类,再往下走。

现象你在界面上看到什么优先怀疑
点启动没反应、按钮是灰的按钮点不动,或提示环境/Java 未就绪环境未初始化、Java 未安装、核心未选择
秒退(几秒内回到已停止)状态闪一下又变回停止Java 版本不对、jar 损坏、配置语法错、installer 没跑完
卡在启动阶段状态是启动中,进度不动世界生成慢、模组加载、下载依赖、磁盘或内存不足
运行中但没有 Done状态“运行中”,终端有输出但没完成世界加载慢、端口绑定失败、控制台里的错误被忽略

第三、四类最容易混淆:状态来自进程是否活着,而能不能进服取决于端口有没有开始监听,这两件事不是一回事。

第一时间看终端最后 20 行

不管哪一类,先打开「终端」把最后 20 行看一遍。90% 的失败能在这里看到 Exception、ERROR 或一句明确的中文摘要,比猜快得多。看不懂就按 小白看日志 找关键词。

应用怎么判断“崩溃”

它看退出码和启动窗口:退出码非 0 一律算异常;退出码是 0 但发生在启动后 20 秒内,也算“启动阶段即退出”。所以秒退一定会被记成异常退出并生成崩溃报告。

第 1 层:运行环境没准备好#

典型现象:启动按钮半透明或点不动;概览页一直挂着「初始化运行环境」;下载核心时提示环境未初始化。

先看哪里:概览页顶部有没有「初始化运行环境」卡片;「依赖与环境管理」里 Termux 那一项是什么状态;手机的剩余存储。

判断标准:卡片消失、Termux 状态正常,才算这一层通过。只要卡片还在,后面所有操作都会失败,连核心都下不下来。

处理动作,按顺序试:

  1. 等它跑完:首次初始化要下载约 50 MB 的运行环境,网速慢时几分钟很正常,进度还在走就别动它。

  2. 换镜像源重试:失败时先点卡片上的「切换到下个镜像源」,再重试一次。

  3. 腾出空间:至少留 1 GB 余量。存储写满时初始化会中断,而且报错往往只有一句 No space left on device。

  4. 卸载运行环境后重新初始化:连续失败再做这一步。它只会重装那套迷你 Linux 环境,公共存储里的服务端目录和存档还在。

实在判断不了,就去「更多 → 运行诊断」跑一次。它会把运行环境、Java、关键命令、字体、核心目录、存储空间、本地端口一次性列出来,能一键修复的只有运行环境、Java、命令、字体这几类;端口和核心文件它不会替你改。

第 2 层:Java 版本或来源不对#

典型现象:秒退,终端最后几行是一段 UnsupportedClassVersionError;或者启动设置里选不到想要的版本。

先看哪里:概览页「当前运行环境」显示的是哪个来源、哪个版本;启动设置抽屉(启动服务端卡片右上角齿轮)里选的是不是同一个。

判断标准:版本和核心要求一致、且这个来源确实提供该版本,才算通过。

文本
java.lang.UnsupportedClassVersionError: ... class file version 65.0,
this version ... only recognizes class file versions up to 61.0

这段的意思是:服务端要 Java 21(65),你跑的是 Java 17(61)。版本对应关系照着这张表看:

服务端版本需要的 Java常见可用来源
≤ 1.16Java 8只有 PRoot 的 Ubuntu 20.04 提供;Termux、Pojav 都没有
1.17 – 1.20.6Java 17Termux JDK、Pojav JRE、PRoot
1.21 及以上Java 21Termux JDK、Pojav JRE、PRoot
26 及以上Java 25Termux JDK、Pojav JRE;PRoot 没有 25

处理动作:

  • 1.21+ 却在用 Java 17 → 装 Java 21,再在启动设置里选它;

  • 1.16 及以下 → 切到「PRoot Linux 容器」+「Ubuntu 20.04」+ Java 8;

  • 提示“当前来源不提供该版本” → 按提示换来源或换版本,应用不会替你偷偷换来源。

换核心不是治 Java 的办法

换个核心,它可能要求更高的 Java,问题反而更明显。先把 Java 这一层弄对,再考虑换核心。另外 Allay 强制要求 Java 21 以上,Modrinth 整合包也常常按新版本 Java 打包,别拿旧环境硬试。

第 3 层:核心文件有问题#

典型现象:秒退,提示找不到主类、Invalid or corrupt jarfile;Forge/NeoForge 装到一半没了下文;选了 BDS 启动被拒。

先看哪里:下载页的「已安装核心列表」里该核心是否正常显示;核心目录里入口 jar 在不在;启动设置里「当前核心」是不是你要跑的那个。

判断标准:核心列表显示正常、入口文件存在、installer 已经跑完,才算通过。

逐项处理:

  1. 先试「校验修复」:下载页对已安装核心提供校验修复,能修好一部分下载不完整的情况。

  2. 修不好就删掉重下:删之前先备份世界,别连 world/ 一起删掉。

  3. 等 installer 跑完:Forge、NeoForge、Quilt 首次安装要下载一堆库,几分钟到十几分钟都正常,中途别切核心。

  4. 选 BDS 的话先查环境:BDS 是 x86_64 + glibc 的程序,靠 PRoot + box64 转译运行,没初始化专用环境就点启动会被拦住。去「依赖与环境管理 → BDS」点「初始化环境」再回来,见 官方基岩版(BDS)开服。

  5. 别用网盘里的 jar 替换:来源不明的“整合包 jar”可能被打过补丁,也可能根本不是这个版本。

核心层还有一个隐蔽的坑:换了核心却没清掉旧的 libraries 缓存,新核心加载到旧库会报一堆 NoSuchMethodError。

第 4 层:配置写错了#

典型现象:启动时提示配置解析失败、找不到世界、端口值非法;或者能启动但行为和你想的不一样。

先看哪里:server.properties 的最近改动;level-name 指向的目录是否存在;server-port 的值。

判断标准:把配置改回上一次能用的版本后能正常启动,就说明问题在这一层。

最常见的四种写错:

  • 拼写错或少了等号,例如 server-port 25565(中间必须用 =);

  • 值两边的引号、空格被一起写进去,server-port= 25565 这种在某些核心上会解析失败;

  • level-name 指向一个不存在的目录,核心会去新建,但如果同名文件被占用就直接报错;

  • 端口写成 0、负数或大于 65535。这里要注意:配置页不校验数值范围,填错也会保存。

server.properties
# server.properties 里最常被改坏的两行
server-port=25565
level-name=world

处理动作:改回上一个能用的版本;没有备份就对着 配置速查 逐项核对。改完一定要重启才生效,改文件不会热加载。PocketMine 系要注意 server.properties 与 pnx.yml 谁在生效,PNX 的 YAML 缩进错了报错会更难懂。

改配置的稳妥顺序

先停服 → 用「文件」页的文本编辑器改 → 确认保存成功 → 再启动。文件页的编辑和删除不检查服务端是否在运行。

第 5 层:端口被占或绑不上#

典型现象:启动到一半退出,日志里出现绑定失败;或者状态“运行中”但朋友连不上。

先看哪里:概览页状态(是不是已经有一个服在跑);终端里的 FAILED TO BIND TO PORT;配置文件里的 server-port。

判断标准:日志里出现 Done 且没有绑定报错,端口才算真的起来了。同一个端口在同一时刻只能被一个进程占用。

文本
[Server thread/ERROR]: **** FAILED TO BIND TO PORT!
The exception was: java.net.BindException: Address already in use
Perhaps a server is already running on that port?

处理动作:

  1. 先确认是不是自己的旧进程还活着——概览页看状态,必要时点「强制停止」(有二次确认,会丢未保存数据)。

  2. 换一个端口(例如 25566),改完重启;用了隧道的话,隧道那边的目标端口也要同步改。

  3. 关掉可能占用该端口的其它应用,或者直接重启手机释放异常占用。

Minexa 没有启动前的端口预检,只有启动后的诊断探测。

停止要等它停完

普通「停止」是向控制台发送 stop,最多等 180 秒让服务端存档退出。超时后不会强杀,而是提示你可以「强制停止」。很多“端口被占用”其实是上一次停止还没结束你就又点了启动。

第 6 层:世界与存档#

典型现象:卡在 Preparing level "world" 很久;提示 level.dat 损坏、区块读取失败;日志里有 Failed to load level。

先看哪里:最近有没有降级过版本、有没有手动替换过 world/ 目录、有没有在服务端运行时拷过文件、磁盘是不是写满了。

判断标准:换一个新建的空世界能正常启动,而原来的世界不行,就说明问题在存档本身。

文本
[Server thread/ERROR]: Failed to load level 'world'
java.io.IOException: Level is corrupt

处理动作:

  1. 先停服,把当前 world/ 整个复制一份留底(这一步比任何修复都重要)。

  2. 从最近一次备份还原世界。注意:还原必须先停服,而且没有二次确认,点一下就执行,详见 备份、还原与世界管理。

  3. 没有备份时,先尝试只替换 level.dat;还是不行再考虑重置世界——那意味着地形和建筑全丢,只有确认没救时才做。

  4. 不要用来源不明的“存档修复工具”反复写 level.dat,写坏一次就再也读不回来了。

版本降级是这里最常见的坑:高版本世界被低版本核心打开时区块格式对不上,表现就是卡在加载或直接报损坏。

六层都查过还不行:最小化重建#

如果六层都过了还是起不来,就别再原地打转了。按下面的顺序重建,每一步都保留可回退的备份。

  1. 备份:整服备份一次,确认备份文件生成了再继续。

  2. 建一个干净的同版本服:新建空 Paper(和原来同版本),不装任何插件模组,先确认它能出 Done。

  3. 搬世界:把旧世界的 world/ 拷到新服,再启动。能起来 → 问题在原服的配置或内容;起不来 → 问题在世界。

  4. 逐个加回插件/模组:每加一个启动一次,出问题就停在那一个。

  5. 决定替换还是放弃:确认是某个插件/模组不兼容时,换版本或换替代品,比继续硬修省时间。

这个流程比重装快,也不会丢世界。整篇的顺序可以浓缩成一张表:

顺序检查通过标准不通过去哪
1运行环境初始化卡片消失、Termux 正常环境管理
2Java版本匹配、来源提供该版本Java 版本
3核心列表正常、installer 完成、非 BDS下载页
4配置语法正确、端口和世界名合法配置基础
5端口无占用、能监听联机排错
6世界能加载、未损坏、磁盘有空间崩溃与存档
上机自查
  • 终端里出现过 Done (...)! For help, type "help",不是停在 Starting server。

  • 概览页「当前运行环境」的 Java 版本和服务端要求的版本一致。

  • server-port 是 1–65535 的整数,且没有第二个服务端在跑同一个端口。

  • 日志里搜不到 UnsupportedClassVersionError、Address already in use、Level is corrupt 这三类词。

  • 有一个刚做的备份,能说出它在哪个目录。

下一步#

读到这儿了,给你点个赞。如果这页内容帮你解决了问题,说明说明书的方向是对的;如果发现错误、过时信息或看不懂的地方,欢迎到 GitHub Issues 告诉我们。

⚡ 回到极速开服 📖 查术语表