java - Java - emoji4j 静态方法调用结束/消失/死亡而没有错误
问题描述
我正在编写一个插件,它从不和谐中获取消息并将其发送到我的世界服务器。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 [信息] 调试:EventChat.java 步骤 0
是的......它停在那里!
代码片段:
我的代码/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;
}
解决方案
在似乎太久之后,我找到了答案。(是的,2个月哈哈)
注意:这仅适用于使用 JDA 和 emoji4j 的任何人
JDA 默认捕获所有 Throwables 并尝试将其记录到控制台,但由于 bungeecord 未使用相同的记录器(或类似的东西,我真的不知道为什么)而失败。
我并不太愚蠢,因为我尝试捕获所有异常并记录它们。但是它抛出了一个可抛出而不是异常......无论出于何种原因......
因此,长话短说,我正在捕捉异常,而 JDA 正在捕捉 Throwable,它表明缺少依赖项并使错误消失而不是打印到控制台。
使固定
try {
} catch (Throwable t) {
// error is now caught and can be logged using bungee's logger
}
推荐阅读
- excel - Excel 新手,#REF!错误对我没有意义。
- r - 比较同一列上的行
- javascript - 如何在javascript中摆脱数组中的数组
- r - 使用 lapply 时功能的工作方式不同
- android - Room + 找不到实现 DB + DB_Impl 不存在
- node.js - Angular Nodejs MySql CORS 问题
- java - 播放服务器音乐时冻结android应用
- c# - 大型数据集上的 Kendo Grid Export to Excel 错误
- c++ - 在向量中查找映射键的最快方法
- solr - 获取 SolrException:为查询定义了两次提升查询