Java - emoji4j 静态方法调用结束/消失/死亡而没有错误
Posted
技术标签:
【中文标题】Java - emoji4j 静态方法调用结束/消失/死亡而没有错误【英文标题】:Java - emoji4j static method call ends/vanishes/dies without error 【发布时间】:2020-06-26 19:31:51 【问题描述】:我正在编写一个插件,它从 discord 中获取消息并将其发送到我的世界服务器。 Minecraft 客户端很难渲染表情符号。因此,我选择使用https://github.com/kcthota/emoji4j 将所有表情符号转换为它们的简码(例如:???? -> :smile: .. 或类似的)
问题:
当调用静态方法shortCodify
时,它永远不会返回。几乎就好像它杀死了它所在的代码并且永远不会继续。控制台没有错误。
似乎调用该方法会立即将其杀死。永远不会打印第 1 步。
它可以多次运行(每次我发送不和谐消息时)。它还没有完全杀死进程。
我试过了:
在各处添加调试打印以尝试追踪问题。
PS:不要讨厌我将 logger.info 和系统 println 混合在一起,我稍后会删除所有这些 xD
控制台输出
13:35:48 [INFO] [Core] 表情符号管理器存在。
13:35:48 [INFO] [Core] 尝试短代码化(包含 1738 个表情符号)
13:35:48 [INFO] 调试:EventChat.java 步骤 0
是的....它停在那里!
代码 sn-ps:
我的代码/EventChat.java
注意:msg
是 String
if
语句(您可以看到 else
)只是检查表情符号数据是否已加载,因为我在单独的线程中运行配置加载。知道它能够到达这里并打印数据存在,这不是问题。
...
else
logger.info("Emoji manager exists.");
try
logger.info("Attempting shortcodify (contains " + EmojiManager.data().size() + " emojis)");
System.out.println("DEBUG: EventChat.java step 0");
msg = EmojiUtils.shortCodify(msg);
logger.info("new message: " + msg);
catch (Exception e)
logger.info("Catching exception");
e.printStackTrace();
logger.info("Emoji processed.");
Emoji4j / EmojiUtils.java
public static String shortCodify(String text)
System.out.println("DEBUG: EmojiUtils.java step 1");
String emojifiedText = emojify(text);
System.out.println("DEBUG: EmojiUtils.java step 2");
for (Emoji emoji : EmojiManager.data())
StringBuilder shortCodeBuilder = new StringBuilder();
shortCodeBuilder.append(":").append(emoji.getAliases().get(0)).append(":");
emojifiedText = emojifiedText.replace(emoji.getEmoji(), shortCodeBuilder.toString());
System.out.println("DEBUG: EmojiUtils.java step 2.loop");
System.out.println("DEBUG: EmojiUtils.java step 3");
return emojifiedText;
【问题讨论】:
您是否尝试过使用实际调试器而不是基于打印的调试? 在 bungeecord 服务器上运行时很难做到......它不是一个独立的程序。 【参考方案1】:在似乎太长的事情之后我找到了答案。 (是的,2 个月哈哈)
注意:这仅适用于将 JDA 与 emoji4j 一起使用的任何人
JDA 默认捕获所有 Throwables 并尝试将其记录到控制台,但由于 bungeecord 未使用相同的记录器(或类似的东西,我真的不知道为什么)而失败。
我并没有太愚蠢,因为我尝试捕获所有异常并记录它们。但是它抛出了一个 throwable 而不是异常......无论出于何种原因......
所以,长话短说,我捕捉到了异常,而 JDA 捕捉到了指示缺失依赖项的 Throwable,并使错误消失而不是打印到控制台。
修复
try
catch (Throwable t)
// error is now caught and can be logged using bungee's logger
【讨论】:
以上是关于Java - emoji4j 静态方法调用结束/消失/死亡而没有错误的主要内容,如果未能解决你的问题,请参考以下文章