java - JavaFX 元素是否响应事件?
问题描述
我一直在尝试 Java Discord API,并尝试将它与 JavaFX 结合起来。我的程序只需要在 TextArea 中记录收到的消息,但每次收到消息时,它都会崩溃。
JDA 抛出:
[JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception
java.lang.NullPointerException
at com.pequinho.discordmessagelogger.PrimaryController.setAreaText(PrimaryController.java:48)
at com.pequinho.discordmessagelogger.PrimaryController.onMessageReceived(PrimaryController.java:70)
at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:376)
at net.dv8tion.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:64)
at net.dv8tion.jda.internal.JDAImpl.handleEvent(JDAImpl.java:151)
at net.dv8tion.jda.internal.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:122)
at net.dv8tion.jda.internal.handle.SocketHandler.handle(SocketHandler.java:36)
at net.dv8tion.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:853)
at net.dv8tion.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:741)
at net.dv8tion.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:720)
at net.dv8tion.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:891)
at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:385)
at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:276)
at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:996)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:755)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)
另外,我用一个简单的测试它sout
,它工作。它也适用于startLogging()
链接到 Button 的方法。请注意,onMessageReceived()
使用相同的方法,并且NullPointerException
无论如何都会抛出:
public class PrimaryController extends ListenerAdapter {
String line;
boolean activeLog = true;
ArrayList<String> history = new ArrayList<>();
@FXML
Button startLoggingBtn;
@FXML
TextArea loggingTextArea;
public static void discordInit() throws LoginException {
String discordToken = "??????????????";
JDA jda = new JDABuilder(AccountType.CLIENT).addEventListeners(new PrimaryController()).setToken(discordToken).build();
}
public void setAreaText(String text) { loggingTextArea.setText(text); }
public void appendAreaText(String text) { loggingTextArea.appendText(text); }
@FXML
private void startLogging() throws IOException {
// setAreaText("Discord Message Logger started");
this.history.clear();
this.history.add(init);
}
@Override
public void onMessageReceived(MessageReceivedEvent event) {
if (!event.isFromType(ChannelType.TEXT)) {
line = "Message from " + event.getAuthor().toString() + ": " + event.getMessage().getContentDisplay();
this.history.add(line);
loggingTextArea().clear;
for(int i = 0;i < history.size();i++) {
appendAreaText(history.get(i) + "\n");
}
}
}
}
解决方案
推荐阅读
- html - 在 Bootstrap 导航栏中放置链接以传播到所有导航栏区域
- spring - RestControllerAdvice @ExceptionHandler(value = Throwable.class)
- javascript - 如何实现异步生成器以使用节点可读流进行流式传输?
- maven - 使用 Maven 程序集插件检测丢失的包含文件
- ios - UICollectionView 粘性标题在集合过度滚动时插入部分后消失一段时间(反弹效果)
- python - 切片数据帧.loc问题
- c# - UserControl:在构造函数中使用自定义属性
- sql - 插入到选择和除外
- asp.net - 需要 MVC 实体框架的帮助
- webstorm - 如何过滤JetBrains“模块依赖图”中包含的模块?