General f:0> Lua(Vanilla).addModOptionsPanel> Exception thrown java.util.Unknown...

2026年09月07日 21:23 23.03 秒 success

错误信息

STACK TRACE ----------------------------------------- Lua(Vanilla).addModOptionsPanel(MainOptions.lua:2817) Lua(Vanilla).create(MainOptions.lua:410) Lua(Vanilla).instantiate(MainScreen.lua:694) Lua(Vanilla).addToUIManager(ISUIElement.lua:1367) Lua(Vanilla).LoadMainScreenPanelInt(MainScreen.lua:1791) Lua(Vanilla).LoadMainScreenPanel(MainScreen.lua:1686). [07-09-26 21:13:54.096] ERROR: General f:0> Lua(Vanilla).addModOptionsPanel> Exception thrown java.util.UnknownFormatConversionException: Conversion = ')' at Formatter.parse(null:-1). Stack trace: java.base/java.util.Formatter.parse(Unknown Source) java.base/java.util.Formatter.format(Unknown Source) java.base/java.util.Formatter.format(Unknown Source) java.base/java.lang.String.format(Unknown Source) zombie.debug.DebugLogStream.printException(DebugLogStream.java:637) zombie.debug.DebugType.printException(DebugType.java:300) zombie.core.Translator.reportMissingArgumentsFromPastAbuse(Translator.java:515) zombie.core.Translator.getText(Translator.java:502) zombie.Lua.LuaManager$GlobalObject.getText(LuaManager.java:7279) java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) java.base/java.lang.reflect.Method.invoke(Unknown Source) se.krka.kahlua.integration.expose.caller.MethodCaller.call(MethodCaller.java:58) se.krka.kahlua.integration.expose.LuaJavaInvoker.call(LuaJavaInvoker.java:194) se.krka.kahlua.integration.expose.LuaJavaInvoker.call(LuaJavaInvoker.java:184) se.krka.kahlua.vm.KahluaThread.callJava(KahluaThread.java:178) Lua(Vanilla).addModOptionsPanel(MainOptions.lua:2817) Lua(Vanilla).create(MainOptions.lua:410) Lua(Vanilla).instantiate(MainScreen.lua:694) Lua(Vanilla).addToUIManager(ISUIElement.lua:1367) Lua(Vanilla).LoadMainScreenPanelInt(MainScreen.lua:1791) Lua(Vanilla).LoadMainScreenPanel(MainScreen.lua:1686) se.krka.kahlua.vm.KahluaThread.luaMainloop(KahluaThread.java:795) se.krka.kahlua.vm.KahluaThread.call(KahluaThread.java:162) se.krka.kahlua.vm.KahluaThread.pcall(KahluaThread.java:1740) se.krka.kahlua.vm.KahluaThread.pcallvoid(KahluaThread.java:1572) se.krka.kahlua.integration.LuaCaller.pcallvoid(LuaCaller.java:60) se.krka.kahlua.integration.LuaCaller.protectedCallVoid(LuaCaller.java:131) zombie.Lua.Event.trigger(Event.java:55) zombie.Lua.LuaEventManager.triggerEvent(LuaEventManager.java:248) zombie.gameStates.MainScreenState.enter(MainScreenState.java:444) zombie.gameStates.GameStateMachine.update(GameStateMachine.java:95) zombie.GameWindow.logic(GameWindow.java:390) zombie.GameWindow.frameStep(GameWindow.java:790) zombie.GameWindow.mainThreadStep(GameWindow.java:567) zombie.MainThread.mainLoop(MainThread.java:69) java.base/java.lang.Thread.run(Unknown Source) . [07-09-26 21:13:54.265] LOG : General f:0> binkId: 6. [07-09-26 21:13:54.464] WARN : Lua f:0 at Lua(Vanilla).namedColorToTable > env.lua-> namedColorToTable color not found: ProgressYellow. [07-09-26 21:13:54.589] LOG : General f:0> binkId: 7. [07-09-26 21:19:25.646] LOG : Lua f:0> : [ErrorMagnifier] Copied to clipboard!.

AI 解决方案

🔍 报错分析

1. 🌐 错误翻译


原文:java.util.UnknownFormatConversionException: Conversion = ')' at Formatter.parse(null:-1)
译文:java.util.UnknownFormatConversionException:在Formatter.parse处出现格式转换异常,转换符为')'

2. 🎯 原因分析


根本原因是字符串格式化语法错误。在Java的String.format()或类似格式化方法中,使用了非法的格式转换符')',导致格式解析失败。

从堆栈追踪看,问题发生在Lua(Vanilla).addModOptionsPanel(MainOptions.lua:2817),说明是Lua代码调用Java格式化方法时,传递了包含非法格式字符的字符串。

3. 💡 解决方案


检查MainOptions.lua第2817行附近的代码,定位使用了String.format()的地方,修复格式字符串中的非法转换符。

典型错误代码示例:

// 错误示例
String.format("Some text %) more text", value);  // %) 是非法格式

修复后的代码:

-- 修复后的Lua调用示例(定位到错误行后修正格式字符串)
-- 假设原错误是 format("%)", value) 这种非法格式
local formattedText = string.format("Some text %s more text", tostring(value))  -- 使用合法的%s、%d等转换符

如果错误是传递了包含%但未正确转义的字符串,应确保:

  • 若需要字面量%,使用%%进行转义

  • 使用正确的格式符(如%s%d%f等)
  • 4. 🛡️ 预防措施


  • 验证格式字符串:编写涉及格式化的代码时,严格按照Java/Lua格式化规范检查格式符,确保只使用合法转换符(如%s%d%f等),避免硬编码未经校验的动态格式字符串。

  • 使用IDE检查工具:在开发中启用IDE的语法检查功能,多数IDE会对格式化字符串的语法进行实时校验,提前发现格式符错误,减少运行时异常。