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

2026年08月10日 22:20 23.51 秒 success

错误信息

``` === Zomboid Settings === Version: 42.20.2 ffe7a8a4b1 (Steam) Mode: MULTIPLAYER Lua Checksum: true [x1] 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.core.Core.ResetLua(Core.java:4208) at zombie.gameStates.ConnectToServerState.receiveServerOptions(ConnectToServerState.java:135) at zombie.gameStates.ConnectToServerState.Finish(ConnectToServerState.java:696) at zombie.gameStates.ConnectToServerState.update(ConnectToServerState.java:104) at zombie.gameStates.MainScreenState.update(MainScreenState.java:778) at zombie.gameStates.GameStateMachine.update(GameStateMachine.java:65) 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. 🎯 原因分析


根本原因:代码中使用了无效的格式字符串转换符。String.format() 方法的格式字符串中,) 不是合法的转换符,导致 UnknownFormatConversionException 异常。

具体位置:根据堆栈跟踪,错误发生在 zombie.debug.DebugLogStream.printException(DebugLogStream.java:637) 方法中,该方法调用了 String.format(),传入了包含非法转换符 ) 的格式字符串。

上下文:在游戏《Project Zomboid》的多玩家模式中,Lua脚本调用Java方法获取文本时触发了错误,属于格式化字符串语法错误。

3. 💡 解决方案


定位到 DebugLogStream.java:637 处的 String.format() 调用,检查并修正格式字符串:

// 错误示例(原问题代码逻辑)
String.format("Some invalid format string with %)", args);

// 修复示例(正确使用格式字符串)
String.format("Some valid format string with %s", args); // %s 为合法转换符

修复步骤

  • 找到 DebugLogStream.java 文件的第 637 行,检查 String.format() 的参数

  • 移除格式字符串中的非法转换符 ),替换为合法的转换符(如 %s%d%f 等)

  • 确保格式字符串中的占位符与实际参数的数量、类型完全匹配
  • 4. 🛡️ 预防措施


  • 规范格式字符串:使用 String.format() 时,严格遵循 Java 格式字符串规范,合法转换符包括 %s(字符串)、%d(整数)、%f(浮点数)等,避免出现无意义的 % 后跟非法字符。

  • 静态代码分析:集成静态代码分析工具(如 SonarLintPMD),可自动检测格式字符串错误,提前发现潜在问题。

  • 单元测试覆盖:对涉及字符串格式化的代码编写单元测试,验证不同参数组合下的输出是否符合预期,及时发现格式错误。