0

我正在尝试在 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();

我在一个可运行的类中做到了这一点,一旦服务器触发一个味精,线程就会在列表中插入味精并显示在列表视图上,但是线程死了而不是继续工作

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

谢谢

4

1 回答 1

4

其他答案

这个问题在很大程度上是以下问题的重复,因此也请参阅这些问题的答案:

解决方案

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

对于您想要将 add 调用包装在Platform.runLater中的特定代码:

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

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

背景资料

JavaFX UI 更新必须在 JavaFX 应用程序线程上进行,否则您的程序很可能会以意想不到的方式发生故障。

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

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

于 2013-05-25T02:09:07.863 回答