Multithreading 更新listview的javafx线程

Multithreading 更新listview的javafx线程,multithreading,javafx,Multithreading,Javafx,我正在尝试在javafx上做一个简单的聊天应用程序 我的实际问题是线程将更新插入observablelist并将其设置在listview上 我使用的代码是: String message_reçu; try { out = new PrintWriter(socket.getOutputStream()); in = new BufferedReader(new InputStreamReader(socket.getI

我正在尝试在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();
我在一个可运行的类中这样做,一旦服务器触发了一个消息,线程就会在列表中插入消息并显示在listview上,但是线程死亡,而不是保留工作

我对它进行了搜索,每个人都说要使用runlater,但我完全不知道在那里我声明了runlater,但我不确定如何执行它,所以欢迎提供任何帮助


谢谢

其他答案

本问题主要是以下问题的重复,因此也请参考以下问题的答案:

解决方案

你的问题比那些问题更具体,所以我会提供一些额外的信息

对于要包装外接程序调用的特定代码:

示例中的所有其他内容都保持原样

背景信息

javafxui更新必须在JavaFX应用程序线程上进行,否则您的程序很可能会以意外的方式出现故障

ListView控件侦听支持ListView单元格值的ObservableList的更改。当该列表更改时,将立即在最初更新列表的线程上触发UI更新


在Platform.runLater中包装列表修改后,确保随后触发的UI更新在JavaFX应用程序线程而不是用户线程上执行。

其他答案

本问题主要是以下问题的重复,因此也请参考以下问题的答案:

解决方案

你的问题比那些问题更具体,所以我会提供一些额外的信息

对于要包装外接程序调用的特定代码:

示例中的所有其他内容都保持原样

背景信息

javafxui更新必须在JavaFX应用程序线程上进行,否则您的程序很可能会以意外的方式出现故障

ListView控件侦听支持ListView单元格值的ObservableList的更改。当该列表更改时,将立即在最初更新列表的线程上触发UI更新

在Platform.runLater中包装列表修改后,确保随后触发的UI更新是在JavaFX应用程序线程而不是用户线程上执行的

Platform.runLater(new Runnable() {
  public void run() {
    messagesReçus.add(message_reçu);
  }
});