Conversion = ')' at java.base/java.util.Formatter.parse(Unknown Source) at java....

2026年08月11日 23:36 21.25 秒 success

错误信息

``` === Zomboid Settings === Version: 42.20.2 ffe7a8a4b1 (Steam) Mode: SINGLE PLAYER [x2] Lua(Vanilla).addModOptionsPanel(MainOptions.lua:3025) 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) java.util.UnknownFormatConversionException: Conversion = ')' at java.base/java.util.Formatter.parse(Unknown Source) at java.base/java.util.Formatter.format(Unknown Source) at java.base/java.util.Formatter.format(Unknown Source) at java.base/java.lang.String.format(Unknown Source) at zombie.debug.DebugLogStream.printException(DebugLogStream.java:637) at zombie.debug.DebugType.printException(DebugType.java:300) at zombie.core.Translator.reportMissingArgumentsFromPastAbuse(Translator.java:515) at zombie.core.Translator.getText(Translator.java:502) at zombie.Lua.LuaManager$GlobalObject.getText(LuaManager.java:7279) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at se.krka.kahlua.integration.expose.caller.MethodCaller.call(MethodCaller.java:58) at se.krka.kahlua.integration.expose.LuaJavaInvoker.call(LuaJavaInvoker.java:194) at se.krka.kahlua.integration.expose.LuaJavaInvoker.call(LuaJavaInvoker.java:184) at se.krka.kahlua.vm.KahluaThread.callJava(KahluaThread.java:178) at se.krka.kahlua.vm.KahluaThread.luaMainloop(KahluaThread.java:795) at se.krka.kahlua.vm.KahluaThread.call(KahluaThread.java:162) at se.krka.kahlua.vm.KahluaThread.pcall(KahluaThread.java:1740) at se.krka.kahlua.vm.KahluaThread.pcallvoid(KahluaThread.java:1572) at se.krka.kahlua.integration.LuaCaller.pcallvoid(LuaCaller.java:60) at se.krka.kahlua.integration.LuaCaller.protectedCallVoid(LuaCaller.java:131) at zombie.Lua.Event.trigger(Event.java:55) at zombie.Lua.LuaEventManager.triggerEvent(LuaEventManager.java:248) at zombie.gameStates.MainScreenState.enter(MainScreenState.java:444) at zombie.gameStates.GameStateMachine.update(GameStateMachine.java:90) at zombie.GameWindow.logic(GameWindow.java:390) at zombie.GameWindow.frameStep(GameWindow.java:790) at zombie.GameWindow.mainThreadStep(GameWindow.java:567) at zombie.MainThread.mainLoop(MainThread.java:69) at java.base/java.lang.Thread.run(Unknown Source) ```

AI 解决方案

🔍 报错分析

1. 🌐 错误翻译


原文:java.util.UnknownFormatConversionException: Conversion = ')'
译文:java.util.UnknownFormatConversionException:未知的格式转换符:')'

2. 🎯 原因分析


  • 根本原因:Java字符串格式化时使用了无效的格式转换符),导致UnknownFormatConversionException

  • 发生位置:错误发生在zombie.debug.DebugLogStream.printException方法中,追溯到zombie.core.Translator.getText,表明是Lua调用Java方法时传递的字符串参数格式错误

  • 上下文分析:Lua代码通过LuaManager调用Java方法,传递的字符串中包含了String.format无法识别的格式转换符,推测是字符串模板中误将)当作格式符使用
  • 3. 💡 解决方案


    检查并修正涉及String.format的Java代码,确保格式字符串的合法性:
    // 错误示例(导致报错的代码逻辑)
    String invalidFormat = "参数错误:%s)";  // 错误的格式字符串,%后的)是非法转换符
    String result = String.format(invalidFormat, someValue);
    
    // 修复后的代码
    String validFormat = "参数错误:%s";  // 移除非法的格式转换符
    String result = String.format(validFormat, someValue);
    

    如果无法直接修改Java源码,需检查触发该错误的Lua脚本(如MainOptions.lua第3025行附近),检查传递给Java方法的字符串参数,移除多余的)或非法格式符。

    4. 🛡️ 预防措施


  • 格式字符串校验:使用Java字符串格式化前,严格校验格式字符串,确保只使用合法的格式转换符(如%s%d%f等),避免将特殊字符当作格式符

  • 调试工具推荐:使用IDE的断点调试功能,定位传递到Translator.getText的参数值,检查字符串内容;在Lua开发中,使用日志打印出传递给Java方法的参数,排查异常字符串来源