JavaFX,命令顺序(看似)被忽略

标签 java javafx label sequence

我正在java1.7下使用JavaFX进行编程,除了这部分之外,所有内容都适用于我的代码。问题是,只有最终结果被写出来。当程序运行时,我希望它在标签中显示“Ping 测试正在运行”文本。但它不会这样做,而是等待几秒钟(直到 ping 完成),然后写出 ping 的结果。这看起来很糟糕,因为 3-4 秒没有任何反应,用户可能会认为它卡住了或者发生了什么……因此我想写出这条消息。 那么,有人可以告诉我为什么会发生这种情况以及如何解决它吗?感谢您的时间。 PS:是的,它需要在 PingIp(...) 中等待几秒钟,这样我才能正确读取所需的信息,否则我会收到空​​指针错误。

@FXML
private Label Ping;

@FXML
    private void Button(ActionEvent event) throws IOException {
        String text;
        Ping.setWrapText(true);
        Ping.setText("Ping test is running");
        text = PingIp.PingWifiAddr(GetIp.retIpWifi()).toString();
        text = text.substring(1, (text.length()-1));
        TeltonikaPing.setWrapText(true);
        TeltonikaPing.setText(text);
    }

以下是编辑后的部分

@FXML
    private void ciscoButton(ActionEvent event) throws IOException {
        CiscoPing.setWrapText(true);
        Task<Void> task1 = new Task<Void>() {
            @Override public Void call() throws IOException {
        String text1;
        text1 = "Ping teszt folyamatban";
        Ping.setWrapText(true);
                Ping.setText(text1);
                return null;

    }
};
new Thread(task1).start();

        Task<Void> task = new Task<Void>() {
            @Override public Void call() throws IOException {
                String text2 = PingIp.PingEtherAddr(GetIp.retIpEther()).toString();
                text2 = text2.substring(1, (text2.length() - 1));
                Ping.setWrapText(true);
                Ping.setText(text2);
                return null;
            }
        };
        new Thread(task).start();
    }

以上是编辑后的,有什么想法吗?

最佳答案

原因是您正在 JavaFX 应用程序线程上完成所有工作。当您在 JavaFX 应用程序线程上设置某些属性(例如标签的文本)时,结果不会立即显示。相反,它会等到您的代码完成运行,此时框架再次接管并可以显示您的更改。

为了解决这个问题,您需要在单独的线程上执行长时间运行的代码,以避免阻塞 GUI 的重绘。看看Concurrency in JavaFX有关如何实现的详细信息。

关于JavaFX,命令顺序(看似)被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364025/

相关文章:

java - 获取具有某些条件的 tableView 项目的特定行(JavaFX)

java - 删除分页编号

java - 如何在 LambdaJ 中创建值为 Collection 的 Map?

java - 为什么 Kotlin 不能为这个具有可为空值类型的 HashMap 推断类型?

Scala 中的 JavaFX 找不到启动方法

c# - 自动调整固定大小标签中的文本以避免文本跳到第二行

javascript - 使用 D3.js 在文本值之间转换

swift - 没有在最后一个 ScoreViewController Swift 上显示分数

java - 如何修复 IntelliJ 中的 'Cannot resolve AutoValue_MyClass'

java - 如何让Web Service使用多线程?