Conversion = ')' at java.base/java.util.Formatter.parse(Unknown Source) at java....
错误信息
```
=== Zomboid Settings ===
Version: 42.20.4 b0bbce05d5 (Steam)
Mode: SINGLE PLAYER
[x3]
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).LoadMainScreenPanelIngame(MainScreen.lua:1785)
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 解决方案
🌐 错误翻译
原文:java.util.UnknownFormatConversionException: Conversion = ')'
译文:java.util.UnknownFormatConversionException: 转换符为 ')'
🎯 原因分析
此错误发生在 Java String.format() 方法调用时,使用了非法的格式化转换符 ) 。getText() 方法在处理翻译文本时,可能使用了不正确的格式化字符串,导致 Formatter 抛出 UnknownFormatConversionException。
💡 解决方案
需要检查 zombie.core.Translator.getText() 和 reportMissingArgumentsFromPastAbuse() 方法中的格式化字符串,确保只使用合法的格式化转换符(如 %s, %d 等)。
// 示例:修改前(问题代码)
String.format("参数错误: %)"); // 非法的转换符
// 修改后
String.format("参数错误: %s", paramValue); // 使用合法的转换符
🛡️ 预防措施
- ✅ 格式化字符串检查:使用静态代码分析工具(如 SpotBugs)检查
String.format()调用,确保转换符合法 - ✅ 单元测试:为翻译和文本处理逻辑编写单元测试,覆盖各种输入情况