Java - emoji4j 静态方法调用 ends/vanishes/dies 没有错误
Java - emoji4j static method call ends/vanishes/dies without error
我正在编写一个插件,它从 discord 获取消息并将其发送到 minecraft 服务器。
Minecraft 客户端很难渲染表情符号。因此我选择使用 https://github.com/kcthota/emoji4j 将所有表情符号转换成它们的简码(例如: -> :smile: ..或类似的)
问题:
调用静态方法时 shortCodify
它从不 returns。几乎就好像它杀死了它所在的代码并且永远不会继续。控制台中没有错误。
似乎调用该方法就好像杀死它一样。永远不会打印第 1 步。
它能够运行多次通过这个(每次我发送一个不和谐的消息)。它没有完全杀死进程。
我试过了:
在各处添加调试打印以尝试追踪问题。
PS:不要因为混合 logger.info 和系统 println 而讨厌我,我稍后会删除所有这些 xD
控制台输出
13:35:48 [INFO] [Core] Emoji manager exists.
13:35:48 [INFO] [Core] Attempting shortcodify (contains 1738 emojis)
13:35:48 [INFO] DEBUG: EventChat.java step 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 个月大声笑)
注意:这仅适用于使用带有 emoji4j 的 JDA 的任何人
JDA 默认捕获所有 Throwable 并尝试将其记录到控制台,但由于 bungeecord 未使用相同的记录器(或类似的东西,我真的不知道为什么)而失败。
我并不太笨,因为我尝试捕获所有异常并记录它们。但是它抛出一个 throwable 而不是异常....无论出于何种原因...
所以,长话短说,我正在捕获异常,而 JDA 正在捕获指示缺少依赖项的 Throwable 并使错误消失而不是打印到控制台。
修复
try {
} catch (Throwable t) {
// error is now caught and can be logged using bungee's logger
}
我正在编写一个插件,它从 discord 获取消息并将其发送到 minecraft 服务器。 Minecraft 客户端很难渲染表情符号。因此我选择使用 https://github.com/kcthota/emoji4j 将所有表情符号转换成它们的简码(例如: -> :smile: ..或类似的)
问题:
调用静态方法时 shortCodify
它从不 returns。几乎就好像它杀死了它所在的代码并且永远不会继续。控制台中没有错误。
似乎调用该方法就好像杀死它一样。永远不会打印第 1 步。
它能够运行多次通过这个(每次我发送一个不和谐的消息)。它没有完全杀死进程。
我试过了:
在各处添加调试打印以尝试追踪问题。
PS:不要因为混合 logger.info 和系统 println 而讨厌我,我稍后会删除所有这些 xD
控制台输出
13:35:48 [INFO] [Core] Emoji manager exists.
13:35:48 [INFO] [Core] Attempting shortcodify (contains 1738 emojis)
13:35:48 [INFO] DEBUG: EventChat.java step 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 个月大声笑)
注意:这仅适用于使用带有 emoji4j 的 JDA 的任何人
JDA 默认捕获所有 Throwable 并尝试将其记录到控制台,但由于 bungeecord 未使用相同的记录器(或类似的东西,我真的不知道为什么)而失败。
我并不太笨,因为我尝试捕获所有异常并记录它们。但是它抛出一个 throwable 而不是异常....无论出于何种原因...
所以,长话短说,我正在捕获异常,而 JDA 正在捕获指示缺少依赖项的 Throwable 并使错误消失而不是打印到控制台。
修复
try {
} catch (Throwable t) {
// error is now caught and can be logged using bungee's logger
}