我正在尝试在javafx上做一个简单的聊天应用程序我的实际问题是将更新插入到一个observablelist并在listview上设置它的线程
我正在使用的代码:
String message_reçu;
try {
out = new PrintWriter(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
message_reçu = in.readLine();
if (message_reçu != null) {
messagesReçus.add(message_reçu);
}
if (message_reçu.equals("QUIT")) {
break;
}
}
in.close();
out.close();
socket.close();
我在一个可运行的类中执行了这个操作,一旦服务器触发了一个msg,该线程就会在列表中插入msg并显示在listview上,但线程会死掉而不是保持工作
我对它进行了搜索,并且每个人都说使用了一个runlater但是我完全迷失在那里我确实声明了一个runlater但是我不确定如何执行它所以任何帮助都是受欢迎的
谢谢
1 回答
Other Answers
这个问题在很大程度上与以下问题重复,因此也请参考以下问题的答案:
Usage of JavaFX Platform.runLater and access to UI from a different thread
Platform.runLater and Task in JavaFX
Solution
你的问题比那些更具体,所以我会提供一些额外的信息 .
对于您想要在Platform.runLater中包装add调用的特定代码:
您示例中的其他所有内容都保持不变 .
Background Information
必须在JavaFX应用程序线程上进行JavaFX UI更新,否则您的程序很可能以意外方式发生故障 .
ListView控件侦听支持ListView单元格值的ObservableList的更改 . 当该列表更改时,将立即在最初更新列表的线程上触发UI更新 .
在Platform.runLater中包装列表修改后,确保在JavaFX应用程序线程而不是用户线程上执行随后触发的UI更新 .